首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF visualtreehelper.getchildrencount返回数据集上的0

WPF visualtreehelper.getchildrencount返回数据集上的0
EN

Stack Overflow用户
提问于 2014-02-14 13:57:53
回答 1查看 2.2K关注 0票数 0

我使用的是32行数据集,当我尝试使用这个GetCell( 28 ,2)失败时,在第28-32行也存在同样的问题。

这个:当上面的第28行时,visualtreehelper.getchildrencount返回0。

我发现,如果我向下滚到数据集上的那些隐藏行,我就可以使用GetCell()和它的工作方式获得那些行。

我怎么能不滚下去呢?

代码语言:javascript
复制
    public DataGridCell GetCell(int row, int column)
    {
        DataGridRow rowContainer = GetRow(row);

        if (rowContainer != null)
        {
            DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);

            DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column); 
            if (cell == null)
            {
                datagrid_arinc_const.ScrollIntoView(rowContainer, datagrid_arinc_const.Columns[column]);
                cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
            }
            return cell;
        }
        return null;
    }

    public DataGridRow GetRow(int index)
    {
        DataGridRow row = (DataGridRow)datagrid_arinc_const.ItemContainerGenerator.ContainerFromIndex(index);
        if (row == null)
        {
            datagrid_arinc_const.UpdateLayout();
            datagrid_arinc_const.ScrollIntoView(datagrid_arinc_const.Items[index]);
            row = (DataGridRow)datagrid_arinc_const.ItemContainerGenerator.ContainerFromIndex(index);
        }
        return row;
    }

    public static T GetVisualChild<T>(Visual parent) where T : Visual
    {
        T child = default(T);
        int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
        for (int i = 0; i < numVisuals; i++)
        {
            Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
            child = v as T;
            if (child == null)
            {
                child = GetVisualChild<T>(v);
            }
            if (child != null)
            {
                break;
            }
        }
        return child;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-15 07:09:06

默认情况下,用户界面虚拟化是为数据启动的,这意味着只生成可见的容器。

如果您想获得不可见的dataGridRow或单元格,则必须从后面的代码手动向下滚动到该行,以便生成容器。请参考本文这里手动滚动dataGridRow到视图。

在dataGrid上禁用UI虚拟化(万一不想向下滚动),将VirtualizingStackPanel.IsVirtualising设置为false。

代码语言:javascript
复制
<DataGrid VirtualizingStackPanel.IsVirtualizing="False"/>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21781339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档