DataTemplate,LoadContent和DataTriggers未触发

时间:2009-08-15 10:09:59

标签: wpf datatemplate datatrigger

我有一个自定义的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" />

示例代码背后:

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" };

输出为“真”和“假”。

有关如何触发DataTemplate.Triggers的任何想法?我是否需要手动循环所有触发器并执行它们?如果是,我该如何评估触发器?

提前致谢,

基督教

1 个答案:

答案 0 :(得分:3)

将您的DataTemplate应用到ContentControl,而不是像以前那样随时修改它:

MyContent.ContentTemplate = FindResource("MyTemplate") as DataTemplate;
MyContent.Content = "1";