Как сделать текстовое поле видимым и скрытым с помощью флажка? - PullRequest
0 голосов
/ 03 июля 2018

Поэтому я пытаюсь сделать текстовое поле невидимым, если флажок не установлен. Все работает нормально, пока я не установлю флажок, а затем снова сниму флажок. Текстовое поле останется видимым.

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 голосов
/ 03 июля 2018

Обработчик события Checked будет срабатывать только тогда, когда вы установите флажок, но не снимите его. Вы также можете использовать обработчик Unchecked в вашем XAML, который сделает текстовое поле скрытым.

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;
}
0 голосов
/ 03 июля 2018

когда 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;
}

Обычно используется привязка к логическому свойству для установки видимости некоторого элемента. В .NET есть BooleanToVisibilityConverter, который возвращает Visible для true и Collapsed для false. Collapsed отличается от Hidden: 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/>
0 голосов
/ 03 июля 2018

Событие Checked не срабатывает при снятии флажка. Событие Unchecked предназначено для этой цели.

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

и нет необходимости отслеживать cchbon.IsChecked в коде:

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

Кроме того, вы можете сделать это через привязку и конвертер:

<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}"/>

Обратите внимание, что Как только вы справитесь с этим подходом, вы можете захотеть реализовать пользовательский конвертер, поскольку встроенный BooleanToVisibilityConverter возвращает Visible / Collapsed для True / False ввода (а не Visible / Hidden)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...