1

我需要修改我的 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);
4

0 回答 0