WPF触发器绑定:将枚举值绑定到visiblity的最佳方法是什么?

m-y*_*m-y 7 c# wpf triggers styles

我有一个用户控件(NameField).在这我有一个包含3个网格一个StackPanel: ,StandardView,.FluidView OtherView在代码隐藏中,我有一个类型()的DependencyProperty调用.枚举包含,,.ViewNameFieldViewenumSTANDARDFLUIDOTHER

我想我必须创建一个转换器,但我不确定这是否必要.我基本上想要这样做,以便唯一可见的网格是与枚举值匹配的那个...也就是说,如果View = NameFieldView.STANDARD那时名字的网格StandardView是可见的而其他两个不是.

另外,我不确定这是否属于Grid.Resources / Style或是Grid.Triggers

Rob*_*ney 10

我为此使用数据触发器.它看起来像这样;

<Style TargetType="DockPanel" x:Key="ViewStyle1">
   <Setter Property="Visibility" Value="Collapsed"/>
   <Style.Triggers>
     <DataTrigger Binding="{Binding ViewStyle}" Value="ViewStyle1">
       <Setter Property="Visibility" Value="Visible"/>
     </DataTrigger>
   </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

然后我DockPanel为每个视图样式创建一个,每当ViewStyle属性更改时,都会显示相应的视图.


Won*_*ane 7

像很多WPF一样,它真的取决于你的口味.这里有几个选择.

您可以创建三个IValueConverter,将View属性的值转换为Visibility(或使用枚举名称作为ConverterParameter并创建一个转换器).

您可以创建三个名为"StandardViewIsVisible","FluidViewIsVisible"和"OtherViewIsVisible"的新属性,这些属性在View属性更改时会更新.这些属性的返回类型为Visibility.即使你没有使用ViewModel,这绝对更像是一种"MVVM"的做事方式.

您可以使用DataTrigger根据View属性的当前值设置适当的网格Visible或Collapsed.