C# 复选框不响应取消选中

C# 复选框不响应取消选中,c#,wpf,checkbox,C#,Wpf,Checkbox,我有3个复选框,当另一个复选框被选中/取消选中时,我想禁用/启用其中的两个复选框。第一步起作用(如果我选中了checkBoxcaja,其他两个复选框将被禁用,但当我取消选中checkBoxcaja时,其他两个复选框不会返回到其原始启用状态 我做错了什么 我是WPF的新手 代码如下: private void checkBoxcaja_Checked(object sender, RoutedEventArgs e) { if (checkBoxcaja.IsChecked == true

我有3个复选框,当另一个复选框被选中/取消选中时,我想禁用/启用其中的两个复选框。第一步起作用(如果我选中了
checkBoxcaja
,其他两个复选框将被禁用,但当我取消选中
checkBoxcaja
时,其他两个复选框不会返回到其原始启用状态

我做错了什么

我是WPF的新手

代码如下:

private void checkBoxcaja_Checked(object sender, RoutedEventArgs e)
{
    if (checkBoxcaja.IsChecked == true)
    {
        checkBoxbanderola.IsEnabled = false;
        checkBoxletra.IsEnabled = false;
    }
    else if (checkBoxcaja.IsChecked == false)
    {
        checkBoxbanderola.IsEnabled = true;
        checkBoxletra.IsEnabled = true;
    }
}

提前感谢

我在这里猜测一下,您将此连接到了
检查的事件

好的,只有勾选该框时才会触发。当未勾选该框时,会触发一个
未勾选的
事件,因此您也需要连接到该框。您有一半的方法属于该框

private void checkBoxcaja_Checked(object sender, RoutedEventArgs e)
{
    checkBoxbanderola.IsEnabled = false;
    checkBoxletra.IsEnabled = false;
}

private void checkBoxcaja_Unchecked(object sender, RoutedEventArgs e)
{
    checkBoxbanderola.IsEnabled = true;
    checkBoxletra.IsEnabled = true;
}

别忘了把它们连接起来。或者,

我在这里猜一猜,说你把它连接到了
选中的事件

好的,只有勾选该框时才会触发。当未勾选该框时,会触发一个
未勾选的
事件,因此您也需要连接到该框。您有一半的方法属于该框

private void checkBoxcaja_Checked(object sender, RoutedEventArgs e)
{
    checkBoxbanderola.IsEnabled = false;
    checkBoxletra.IsEnabled = false;
}

private void checkBoxcaja_Unchecked(object sender, RoutedEventArgs e)
{
    checkBoxbanderola.IsEnabled = true;
    checkBoxletra.IsEnabled = true;
}

别忘了连接它们。或者,您也可以在XAML和Datatriggers中完全连接它们:

<CheckBox x:Name="CBOne" Grid.Column="1" Grid.Row="3" Content="One" HorizontalAlignment="Center" VerticalAlignment="Center"></CheckBox>
<CheckBox x:Name="CBTwo" Grid.Column="2" Grid.Row="3" Content="Two" HorizontalAlignment="Left" VerticalAlignment="Center">
        <CheckBox.Style>
            <Style TargetType="CheckBox">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=CBOne, Path=IsChecked}" Value="True">
                        <Setter Property="IsEnabled" Value="False"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding ElementName=CBOne, Path=IsChecked}" Value="False">
                        <Setter Property="IsEnabled" Value="True"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </CheckBox.Style>
</CheckBox>
<CheckBox x:Name="CBThree" Grid.Column="2" Grid.Row="3" Content="Three" HorizontalAlignment="Right" VerticalAlignment="Center">
        <CheckBox.Style>
            <Style TargetType="CheckBox">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=CBOne, Path=IsChecked}" Value="True">
                        <Setter Property="IsEnabled" Value="False"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding ElementName=CBOne, Path=IsChecked}" Value="False">
                        <Setter Property="IsEnabled" Value="True"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </CheckBox.Style>
</CheckBox>

您也可以在XAML中使用Datatriggers完全执行此操作:

<CheckBox x:Name="CBOne" Grid.Column="1" Grid.Row="3" Content="One" HorizontalAlignment="Center" VerticalAlignment="Center"></CheckBox>
<CheckBox x:Name="CBTwo" Grid.Column="2" Grid.Row="3" Content="Two" HorizontalAlignment="Left" VerticalAlignment="Center">
        <CheckBox.Style>
            <Style TargetType="CheckBox">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=CBOne, Path=IsChecked}" Value="True">
                        <Setter Property="IsEnabled" Value="False"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding ElementName=CBOne, Path=IsChecked}" Value="False">
                        <Setter Property="IsEnabled" Value="True"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </CheckBox.Style>
</CheckBox>
<CheckBox x:Name="CBThree" Grid.Column="2" Grid.Row="3" Content="Three" HorizontalAlignment="Right" VerticalAlignment="Center">
        <CheckBox.Style>
            <Style TargetType="CheckBox">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=CBOne, Path=IsChecked}" Value="True">
                        <Setter Property="IsEnabled" Value="False"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding ElementName=CBOne, Path=IsChecked}" Value="False">
                        <Setter Property="IsEnabled" Value="True"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </CheckBox.Style>
</CheckBox>


您可以尝试的一件事是在事件内部设置一个断点以查看发生了什么-您可能注意到的第一件事是,只有在选中复选框时,断点才被击中。这可能为开始寻找解决方案的方向提供了线索。您可以尝试的一件事是在事件内部设置一个断点查看发生了什么的事件-您可能注意到的第一件事是,只有在选中复选框时,断点才会被击中。这可能为开始寻找解决方案的方向提供了线索。如果对两者使用相同的事件处理程序,您可以简单地执行:“checkBoxbanderola.IsEnabled=!checkBoxcaja.IsChecked”如果对这两个事件都使用相同的事件处理程序,则可以简单地执行:“checkBoxbanderola.IsEnabled=!checkBoxcaja.IsChecked”等操作。