复选框显示/隐藏文本框 WPF

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26628213/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 12:39:58  来源:igfitidea点击:

CheckBox Show/Hide TextBox WPF

c#.netwpfxamlmvvm

提问by Andre Korosh Kordasti

As the title says, Iam trying to show/hide a TextBox in WPF without writing code in MainWindow.xaml.cs file.

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

Model:

模型:

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

View:

看法:

<Window x:Class="PiedPiper.View.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Name="Window"
    Title="WPF" Height="400" Width="400">

    <CheckBox Content="Show comment" Name="CommentCheckBox"/>
    <TextBox Text="{Binding Comment, UpdateSourceTrigger=PropertyChanged}" Visibility="Hidden" Name="CommentTextBox"></TextBox>
</Grid>

ViewModel:

视图模型:

    public class PersonViewModel : INotifyPropertyChanged
    {
    public PersonViewModel(Person person)
    {
        Comment = person.Comment;
    }

    private string _comment;
    public string Comment
    {
        get { return _comment; }
        set { _comment = value; OnPropertyChanged("Comment"); }
    }

    private void OnPropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

So the TextBox should be hidden at start, but visible when checkbox is checked. Please help!

因此 TextBox 应该在开始时隐藏,但在选中复选框时可见。请帮忙!

Thanks.

谢谢。

回答by dkozl

You can bind TextBox.Visiblityto CheckBox.IsChecked. If you want to toggle between Hiddenand Visiblethen you need to either write custom IValueConverteror create simple Style.Trigger

您可以绑定TextBox.VisiblityCheckBox.IsChecked. 如果要在Hidden和之间切换,Visible则需要编写自定义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>

if you want to toggle between Collapsedand Visiblethere is an easier way and you can use build in BooleanToVisibilityConverter

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

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