WPF:如何为动态生成的DataGrid对象创建可视化树?

时间:2013-07-11 17:01:39

标签: wpf vb.net datagrid datagridcell

如果我在后面的代码中创建DataGrid并添加了一些任意列,我就无法为DataGrid创建可视树。我需要动态编辑特定行的CellStyle属性,因此我希望能够在运行时在VisualTreeHelper对象上使用DataGrid函数。如何为动态创建的DataGrid对象构建可视化树?如果我在设计时使用XAML构建一个树,那么构建的树没有任何问题,但我不确定如何为动态案例执行此操作。

我的问题的一个简单的示例案例是这样的:

    <Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
        <Grid Name="MainGrid" />
    </Window>

将代码隐藏为:

    Class MainWindow
        Dim dg As DataGrid
        Dim col As DataGridTextColumn

        Sub New()
            InitializeComponent()

            col.Header = "HEAD0RR"
            dg.Columns.Add(col)
            MainGrid.Children.Add(dg)
        End Sub
    End Class

但是WPF Tree Visualizer只显示我创建的DataGrid没有父项或子项,因此VisualTreeHelper函数不起作用。

1 个答案:

答案 0 :(得分:0)

  

如果我使用XAML构建一个树,那么构建的树没有任何问题   设计时,但我不知道如何为动态案例做这件事。

首先,“XAML”和“动态”并不相互排斥。您是否确定需要构建网格并通过程序(VB)代码访问CellStyles? XAML有多个选项,比显式扫描可视化树更容易,更易于维护,更具动态性。例如:

至于为什么你看不到可视树中的项目:你什么时候试图访问它?它不会立即填充。您可能需要等待Loaded事件或DataGrid ItemContainerGeneratorStatusChanged事件。