我是WPF的新手,我尝试创建xaml逻辑,以根据ViewModel上的AllowMiscTitle的值显示/隐藏控件.XAML中包含两个领域的标准砖的组合框("先生","太太",...,"其他")时,"其他"选择我想要的文本框来显示.
我创建了以下xaml:
<DockPanel Validation.Error="Validation_Error" HorizontalAlignment="Stretch">
<ComboBox ItemsSource="{Binding Path=Titles, Mode=OneTime}"
Text="{Binding Path=Title}"/>
<TextBox x:Name="TxtBxTitle" Margin="5,5" Visibility="Visible">
<TextBox.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=AllowMiscTitle}" Value="false">
<Setter Property="TextBox.Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
这是Trigger行不通的,因为你Visibility明确地设置了属性TextBox
像这样做:
<TextBox x:Name="TxtBxTitle" Margin="5,5">
<TextBox.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=AllowMiscTitle}" Value="false">
<Setter Property="TextBox.Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
Run Code Online (Sandbox Code Playgroud)
原因是Dependency属性值优先级.
有一个
<BooleanToVisibilityConverter x:Key="BoolToVis"></BooleanToVisibilityConverter>
Run Code Online (Sandbox Code Playgroud)
您可以按以下方式使用它
<TextBox Visibility="{Binding YourPropertyName, Converter={StaticResource BoolToVis}}"></TextBox>
Run Code Online (Sandbox Code Playgroud)