gpt4 book ai didi

wpf - DataTemplate、LoadContent 和 DataTriggers 未触发

转载 作者:行者123 更新时间:2023-12-04 16:03:19 30 4
gpt4 key购买 nike

我有一个自定义 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?我是否需要手动循环所有触发器并执行它们?如果是,我如何评估触发器?

提前致谢,

基督教

最佳答案

申请您​​的 DataTemplateContentControl而不是像您一样即时修改它:

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

关于wpf - DataTemplate、LoadContent 和 DataTriggers 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1281578/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com