5

タイプ「DataTemplate」のDependencyProperty「ItemTemplate」を持つカスタムUserControlがあります。.LoadContent() を介してこの ItemTemplate のインスタンスを作成し、.DataContext を割り当てて、ContentControl に配置します。私が持っている唯一の欠点は、DataTemplate.Triggers が起動されないことです。

Xaml コードの例:

<Window.Resources>
    <DataTemplate x:Key="MyTemplate">
        <Label Name="MyLabel" Content="Default"/>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding}" Value="1">
                <Setter TargetName="MyLabel" Property="Content" Value="True" />
            </DataTrigger>
            <DataTrigger Binding="{Binding}" Value="0">
                <Setter TargetName="MyLabel" Property="Content" Value="False" />
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>        
</Window.Resources>

<ContentControl x:Name="MyContent" />

コード ビハインドの例:

private void Window_Loaded(object sender, RoutedEventArgs e) {
    var template = FindResource("MyTemplate") as DataTemplate;

    var instance = template.LoadContent() as FrameworkElement;
    instance.DataContext = "1";
    MyContent.Content = instance;
}

出力は「デフォルト」です。

ListBox で使用される同じ DataTemplate は正常に機能します。

<ListBox x:Name="MyListBox" ItemTemplate="{StaticResource MyTemplate}" />

コードビハインド:

MyListBox.ItemsSource = new[] { "1", "0" };

出力は「True」と「False」です。

DataTemplate.Triggers を起動する方法はありますか? すべてのトリガーを手動で切り替えて実行する必要がありますか? はいの場合、トリガーを評価するにはどうすればよいですか?

前もって感謝します、

キリスト教徒

4

1 に答える 1

4

あなたのようにその場で変更するのではなく、DataTemplateに適用します。ContentControl

MyContent.ContentTemplate = FindResource("MyTemplate") as DataTemplate;
MyContent.Content = "1";
于 2009-08-15T11:47:00.553 に答える