繁体   English   中英

"CheckBox 显示\/隐藏文本框 WPF"

[英]CheckBox Show/Hide TextBox WPF

正如标题所说,我试图在 WPF 中显示\/隐藏文本框,而不在 MainWindow.xaml.cs 文件中编写代码。

模型:

public class Person
{
    public string Comment { get; set; }
}

您可以将TextBox.Visiblity绑定到CheckBox.IsChecked 如果要在HiddenVisible之间切换,则需要编写自定义IValueConverter或创建简单的Style.Trigger

<StackPanel>
    <CheckBox Content="Show comment" Name="CommentCheckBox"/>
    <TextBox Text="{Binding Comment, UpdateSourceTrigger=PropertyChanged}" Name="CommentTextBox">
        <TextBox.Style>
            <Style TargetType="{x:Type TextBox}">
                <Setter Property="Visibility" Value="Hidden"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=CommentCheckBox, Path=IsChecked}" Value="True">
                        <Setter Property="Visibility" Value="Visible"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>
</StackPanel>

如果你想在CollapsedVisible之间切换,有一种更简单的方法,你可以在BooleanToVisibilityConverter使用build

<StackPanel>
    <StackPanel.Resources>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
    </StackPanel.Resources>
    <CheckBox Content="Show comment" Name="CommentCheckBox"/>
    <TextBox 
        Text="{Binding Comment, UpdateSourceTrigger=PropertyChanged}" 
        Visibility="{Binding ElementName=CommentCheckBox, Path=IsChecked, Converter={StaticResource BooleanToVisibilityConverter}}" 
        Name="CommentTextBox"/>
</StackPanel>

最简单的方法是编写一个自定义的“BooleanToHiddenVisibilityConverter”并使用它(就像 dkozl 说的那样)。 这是一个非常简单的转换器,在许多情况下都很方便。 我认为每个下降 WPF 应用程序都应该有一个。

public sealed class BooleanToHiddenVisibilityConverter : IValueConverter
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
        bool bValue = false;
        if (value is bool) 
        {
            bValue = (bool)value;
        }
        return (bValue) ? Visibility.Visible : Visibility.Hidden;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is Visibility) 
        {
            return (Visibility)value == Visibility.Visible; 
        }
        return false;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM