gpt4 book ai didi

wpf - 基于 DataContext 属性的触发器

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

假设我想根据 DataContext 中的属性值显示/隐藏元素,我该如何实现?

// In MainWindow.xaml.cs: DataContext of MainWindow.xaml
public int Mode { get; set; }

在 XAML 中,我想显示基于 Mode 的隐藏元素.我怎样才能使以下工作?或者实现这一点的适当方法是什么?
<StackPanel>
<StackPanel.Triggers>
<Trigger Property="Mode" Value="1">
<Setter TargetName="txt1" Property="Visibility" Value="Visible" />
<Setter TargetName="txt2" Property="Visibility" Value="Collapsed" />
<Setter TargetName="txt3" Property="Visibility" Value="Visible" />
</Trigger>
<Trigger Property="Mode" Value="2">
<Setter TargetName="txt1" Property="Visibility" Value="Collapsed" />
<Setter TargetName="txt2" Property="Visibility" Value="Visible" />
<Setter TargetName="txt3" Property="Visibility" Value="Collapsed" />
</Trigger>
</StackPanel.Triggers>
<TextBlock Text="TextBlock 1" x:Name="txt1" />
<TextBlock Text="TextBlock 2" x:Name="txt2" />
<TextBlock Text="TextBlock 3" x:Name="txt3" />
</StackPanel>

目前,我得到的错误是“在类型'StackPanel'中找不到属性'模式'。D:\tmp\WpfApplication1\TriggersAndProperties\MainWindow.xaml”

最佳答案

您需要使用 DataTriggers如果您想要可以在绑定(bind)上工作的触发器。问题是,DataTriggers仅在样式和模板上可用,因此您需要像这样定义一个:

<StackPanel>
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Mode}" Value="1">
<Setter TargetName="txt1" Property="Visibility" Value="Visible" />
<Setter TargetName="txt2" Property="Visibility" Value="Collapsed" />
<Setter TargetName="txt3" Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Mode}" Value="2">
<Setter TargetName="txt1" Property="Visibility" Value="Collapsed" />
<Setter TargetName="txt2" Property="Visibility" Value="Visible" />
<Setter TargetName="txt3" Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Text="TextBlock 1" x:Name="txt1" />
<TextBlock Text="TextBlock 2" x:Name="txt2" />
<TextBlock Text="TextBlock 3" x:Name="txt3" />
</StackPanel>

另一种解决方案是使用 IValueConverterMode 转换 int到 Visibility您想要的,并将其直接应用于每个文本 block Visibility属性(property)。

请注意,Dean Chalk 的回答仍然有效:您必须使用 DependencyProperty或实现 INotifyPropertyChanged如果您想更改 Mode触发。

关于wpf - 基于 DataContext 属性的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4295997/

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