我有一个自定义的UserControl,其中有一个名为“ItemTemplate”的DependencyProperty,类型为“DataTemplate”。我通过.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吗?我需要手动循环所有触发器并执行它们吗?如果是,我如何评估触发器?
提前感谢,
克里斯蒂安