![](/img/trans.png)
[英]Best way to show/hide a textbox when checkbox is checked/unchecked in a datalist
[英]CheckBox Show/Hide TextBox WPF
正如标题所说,我试图在 WPF 中显示\/隐藏文本框,而不在 MainWindow.xaml.cs 文件中编写代码。
模型:
public class Person
{
public string Comment { get; set; }
}
您可以将TextBox.Visiblity
绑定到CheckBox.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>
如果你想在Collapsed
和Visible
之间切换,有一种更简单的方法,你可以在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.