Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何知道wpf toolkit datagrid中的lastVisbile行_Wpf_Wpftoolkit - Fatal编程技术网

如何知道wpf toolkit datagrid中的lastVisbile行

如何知道wpf toolkit datagrid中的lastVisbile行,wpf,wpftoolkit,Wpf,Wpftoolkit,我有datagrid,它有200行数据。我需要在4个监视器中显示记录。 监视器分辨率可能不同。所以,我需要以这样一种方式显示记录,假设40条记录可以放在第一个监视器中,我需要像这样将剩余的记录放在第二个监视器中 如何知道屏幕上最后一行可见的数据,以便进行计数并将剩余数据推送到下一个监视器 或者任何其他方法也会有帮助。这不容易做到!几个月前,我为Windows Phone 7应用程序编写了一个实用程序方法,用于枚举ItemsControl中当前可见的项: /// <summary&g

我有datagrid,它有200行数据。我需要在4个监视器中显示记录。 监视器分辨率可能不同。所以,我需要以这样一种方式显示记录,假设40条记录可以放在第一个监视器中,我需要像这样将剩余的记录放在第二个监视器中

如何知道屏幕上最后一行可见的数据,以便进行计数并将剩余数据推送到下一个监视器


或者任何其他方法也会有帮助。

这不容易做到!几个月前,我为Windows Phone 7应用程序编写了一个实用程序方法,用于枚举ItemsControl中当前可见的项:

    /// <summary>
    /// Enumerates all the items that are currently visible in an ItemsControl. This
    /// implementation works for both virtualized and non-virtualized panels.
    /// </summary>
    public static IEnumerable<FrameworkElement> GetItemsInView(this ItemsControl itemsControl)
    {
        // find the panel that hosts our items - this is 'cached'
        // using the ItemsControl.Tag property to minimize visual tree
        // navigation
        Panel itemsHostPanel = itemsControl.Tag as Panel;
        if (itemsHostPanel == null)
        {
            itemsHostPanel = itemsControl.Descendants<Panel>()
                                            .Cast<Panel>()
                                            .Where(p => p.IsItemsHost)
                                            .SingleOrDefault();
            itemsControl.Tag = itemsHostPanel;
        }

        VirtualizingStackPanel vsp = itemsHostPanel as VirtualizingStackPanel;
        if (vsp != null)
        {
            // implementation for virtualizing lists
            return GetItemsInView(itemsControl, vsp);
        }
        else
        {
            // implementation for non-virtualizing lists
            return Enumerable.Range(0, itemsControl.Items.Count)
                          .Select(index => itemsControl.ItemContainerGenerator.ContainerFromIndex(index))
                          .Cast<FrameworkElement>()
                          .Where(container => container.GetRelativePosition(itemsControl).Y + container.ActualHeight > 0)
                          .Where(container => container.GetRelativePosition(itemsControl).Y < itemsControl.ActualHeight);
        }
    }

    /// <summary>
    /// Gets the items in view for a virtualizing list
    /// </summary>
    private static IEnumerable<FrameworkElement> GetItemsInView(this ItemsControl itemsControl, VirtualizingStackPanel vsp)
    {
        // iterate over each of the items in view
        int firstVisibleItem = (int)vsp.VerticalOffset;
        int visibleItemCount = (int)vsp.ViewportHeight;
        for (int index = firstVisibleItem; index <= firstVisibleItem + visibleItemCount + 2; index++)
        {
            var item = itemsControl.ItemContainerGenerator.ContainerFromIndex(index) as FrameworkElement;
            if (item == null)
                continue;

            yield return item;
        }
    }
//
///枚举ItemsControl中当前可见的所有项。这
///实现适用于虚拟化和非虚拟化面板。
/// 
公共静态IEnumerable GetItemsView(此ItemsControl ItemsControl)
{
//查找承载项目的面板-这是“缓存”
//使用ItemsControl.Tag属性最小化可视树
//航行
Panel itemsHostPanel=itemsControl.tagas Panel;
if(itemsHostPanel==null)
{
itemsHostPanel=itemsControl.subjects()
.Cast()
.Where(p=>p.IsItemsHost)
.SingleOrDefault();
itemsControl.Tag=itemsHostPanel;
}
VirtualizingStackPanel vsp=itemsHostPanel作为VirtualizingStackPanel;
如果(vsp!=null)
{
//虚拟化列表的实现
返回GetItemsInView(itemsControl,vsp);
}
其他的
{
//非虚拟化列表的实现
返回可枚举的.Range(0,itemsControl.Items.Count)
.Select(索引=>itemsControl.ItemContainerGenerator.ContainerFromIndex(索引))
.Cast()
.Where(container=>container.GetRelativePosition(itemsControl).Y+container.ActualHeight>0)
.Where(container=>container.GetRelativePosition(itemsControl).Y对于(int index=firstVisibleItem;index),感谢您的回复。coline,因此我需要将网格放置在itemscontrol中。我对WPF来说是一个非常新的蜜蜂。如果您有任何示例,我们可以如何使用这个扩展类,这将更有帮助。