WPF显示/隐藏带触发器的控件

use*_*456 4 wpf triggers mvvm

我是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)

Kap*_*íko 5

这是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属性值优先级.


Nit*_*esh 5

有一个

<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)