我需要修改我的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方法,但由于尚未创建Visual Tree,因此它只返回null。
一旦我有权访问堆栈面板,我计划通过FrameworkElementFactory方法添加控件。
这是我想要的方法,但我愿意接受完全不同的想法
var leftPanel = FindName("stackPanelLeft");
FrameworkElementFactory control = new FrameworkElementFactory(typeof(TextBlock));
textBlock.SetBinding(TextBlock.TextProperty, new Binding(dataTable.ColumnName));
leftPanel.AppendChild(textBlock);