假设我想根据 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”类型中找不到属性“Mode”。 D:\tmp\WpfApplication1\TriggersAndProperties\MainWindow.xaml"
你需要使用DataTriggers
如果您想要可以在绑定上工作的触发器。问题是,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>
另一种解决方案是使用IValueConverter
将 int 转换为Mode
to the Visibility
你想要的,并将其直接应用到每个文本块Visibility
财产。
请注意,Dean Chalk 的答案仍然有效:您必须使用DependencyProperty
或实施INotifyPropertyChanged
如果你想改变Mode
引起。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)