Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf DataTemplate、LoadContent和DataTriggers未触发_Wpf_Datatemplate_Datatrigger - Fatal编程技术网

Wpf DataTemplate、LoadContent和DataTriggers未触发

Wpf DataTemplate、LoadContent和DataTriggers未触发,wpf,datatemplate,datatrigger,Wpf,Datatemplate,Datatrigger,我有一个自定义UserControl,它具有类型为“DataTemplate”的DependencyProperty“ItemTemplate”。我通过.LoadContent()创建此ItemTemplate的一个实例,分配.DataContext并将其放入ContentControl。我唯一的缺点是DataTemplate.Triggers没有被激发 Xaml代码示例: <Window.Resources> <DataTemplate x:Key="MyTempla

我有一个自定义UserControl,它具有类型为“DataTemplate”的DependencyProperty“ItemTemplate”。我通过.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" />
输出为“默认”

列表框中使用的相同数据模板可以正常工作:

<ListBox x:Name="MyListBox" ItemTemplate="{StaticResource MyTemplate}" />
输出为“真”和“假”

你知道如何触发DataTemplate.Triggers吗?我是否需要手动循环所有触发器并执行它们?如果是,我如何评估触发器

提前感谢,


Christian

将您的
数据模板
应用于
内容控件
,而不是像您这样动态修改它:

MyContent.ContentTemplate = FindResource("MyTemplate") as DataTemplate;
MyContent.Content = "1";
是的,这就成功了(一个小类型,你指的是MyContent.Content=“1”(或“0”))。谢谢
MyListBox.ItemsSource = new[] { "1", "0" };
MyContent.ContentTemplate = FindResource("MyTemplate") as DataTemplate;
MyContent.Content = "1";