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