如何使文本框可见和隐藏?

时间:2018-07-03 17:16:07

标签: c# wpf

因此,我试图在未选中复选框时使我的文本框不可见。一切正常,直到我选中该框,然后再次取消选中它。该文本框将保持可见。

private void chbon_Checked_1(object sender, RoutedEventArgs e)
    {
        if (cchbon.IsChecked == true)
        {

            txtshow.Visibility = System.Windows.Visibility.Visible;
        }
        if (chbon.IsChecked == false)
        {
            txtshow.Visibility = System.Windows.Visibility.Hidden;
        }
    }

这是复选框的XAML:

<CheckBox x:Name="chbon" Content="On" HorizontalAlignment="Left" Margin="175,84,0,0" VerticalAlignment="Top" Checked="chbon_Checked_1"/>
<TextBox x:Name="txtshow" HorizontalAlignment="Left" Height="23" Margin="272,82,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="29" Visibility="Hidden"/>

3 个答案:

答案 0 :(得分:3)

The event Checked does not fire when uncheck happens. The event Unchecked is for that purpose.

... Checked="chbon_Checked" Unchecked="chbon_Unchecked"/>

and no need to monitor cchbon.IsChecked in code behind:

private void chbon_Checked(object sender, RoutedEventArgs e)
{
        txtshow.Visibility = System.Windows.Visibility.Visible;
}
private void chbon_Unchecked(object sender, RoutedEventArgs e)
{
        txtshow.Visibility = System.Windows.Visibility.Hidden;
}

Alternatively, you can do it via binding and a converter:

<Window.Resources>
    <BooleanToVisibilityConverter x:Key="BoolToVis"/>
</Window.Resources>

...

<CheckBox x:Name="chbon"/>
<TextBox x:Name="txtshow" Visibility="{Binding ElementName=chbon, Path=IsChecked, 
         Converter={StaticResource BoolToVis}, FallbackValue=Hidden}"/>

Note that, Once you managed this approach you may want to implement a custom converter since the built-in BooleanToVisibilityConverter returns Visible/Collapsed for True/False input (and not Visible/Hidden)

答案 1 :(得分:2)

仅当您选中复选框时,才会选中Checked事件处理程序,而不会取消选中它。您还可以在XAML中使用Unchecked处理程序,这将使文本框处于隐藏状态。

private void chbon_Unchecked(object sender, RoutedEventArgs e)
{
     txtshow.Visibility = System.Windows.Visibility.Hidden;
}

private void chbon_Checked_1(object sender, RoutedEventArgs e)
{
     txtshow.Visibility = System.Windows.Visibility.Visible;
}

答案 2 :(得分:1)

当CheckBox进入未检查状态时,将触发Unchecked事件(与Checked类似)。向两者添加事件处理程序。

<CheckBox x:Name="chbon" 
    Content="On" 
    HorizontalAlignment="Left" 
    Margin="175,84,0,0" 
    VerticalAlignment="Top" 
    Checked="chbon_Checked_1"
    Unhecked="chbon_Checked_1"/>
private void chbon_Checked_1(object sender, RoutedEventArgs e)
{
     txtshow.Visibility = cchbon.IsChecked ? Visibility.Visible : Visibility.Hidden;
}

通常使用绑定到boolean属性来设置某些元素的可见性。 .NET中有一个BooleanToVisibilityConverter,对于Visible返回true,对于Collapsed返回falseCollapsedHidden不同:Hidden元素stil声称屏幕上的空间好像是可见的。

有一种方法可以使用触发器来实现XAML中的所有功能:

<CheckBox x:Name="chbon" Content="On" 
          HorizontalAlignment="Left" Margin="175,84,0,0" VerticalAlignment="Top"/>

<TextBox x:Name="txtshow" 
         HorizontalAlignment="Left" VerticalAlignment="Top"
         Height="23" Width="29" Margin="272,82,0,0" TextWrapping="Wrap">    
    <TextBox.Style>        
        <Style TargetType="TextBox">            
            <Setter Property="Visibility" Value="Hidden"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsChecked, ElementName=chbon}" Value="True">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>            
        </Style>        
    </TextBox.Style>   
<TextBox/>