我需要修改我的 DataTemplate 以在运行时向我的 StackPanel 添加一些列。
所以我需要一种方法来访问我的用户控件中的“stackPanelLeft”和“stackPanelRight”。
我知道我可以将所有代码变成一个长 xml 字符串并加载它,但我想找到一种方法来从 DataTemplate 访问堆栈面板并以这种方式修改它们。一种“混合”方法。
<ListView.ItemTemplate>
<DataTemplate>
<Grid x:Name="mainGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="40" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="40" />
</Grid.ColumnDefinitions>
<CheckBox />
<Image Grid.Column="1" />
<StackPanel Grid.Column="2" x:Name="stackPanelLeft"/>
<StackPanel Grid.Column="3" x:Name="stackPanelRight"/>
<Image Grid.Column="4" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
我不知道堆栈面板中会出现什么。根据环境,它可能是按钮、文本框、复选按钮等。
我尝试使用 FindName 方法,但由于尚未创建可视树,它只返回 null。
访问堆栈面板后,我计划通过 FrameworkElementFactory 方法添加控件。
这是我想要的方法,但我对完全不同的想法持开放态度
var leftPanel = FindName("stackPanelLeft");
FrameworkElementFactory control = new FrameworkElementFactory(typeof(TextBlock));
textBlock.SetBinding(TextBlock.TextProperty, new Binding(dataTable.ColumnName));
leftPanel.AppendChild(textBlock);