取消选中“不工作”复选框

本文关键字:不工作 复选框 工作 取消 | 更新日期: 2023-09-27 18:21:36

我有一个复选框,当选中它和单击它取消选中它时,它应该起作用。选中时,应启用/确保其他复选框已选中,未选中时,其他复选框应取消选中。检查后工作正常。但如果不加以控制,什么也不会发生。所以我缺少了一些类似"onChange"属性的东西。

我的代码可能有什么问题

<CheckBox Content="Check all" Grid.Column="1" Grid.Row="1" Margin="200 7 0 0" Name="IsCheckedCheckAll" Checked="IsCheckedCheckAll_Checked"/>
if (IsCheckedCheckAll.IsChecked == true)
        {
            if (IsCheckedCheckAll.Content.Equals("Check all"))
            {
                IsCheckedCheckAll.Content = "Uncheck all";
                Exc1.IsChecked = true;
                Exc2.IsChecked = true;
                Exc3.IsChecked = true;
                Exc4.IsChecked = true;
                Exc5.IsChecked = true;
            }
        }
        else
        {
            if (IsCheckedCheckAll.IsChecked == false)
            {
                IsCheckedCheckAll.Content = "Check all";
                Exc1.IsChecked = false;
                Exc2.IsChecked = false;
                Exc3.IsChecked = false;
                Exc4.IsChecked = false;
                Exc5.IsChecked = false;
            }
        }

取消选中“不工作”复选框

您缺少未选中的事件处理程序。

所以将XAML更改为

  <CheckBox Content="Check all" Grid.Column="1" Grid.Row="1" Margin="200 7 0 0" Name="IsCheckedCheckAll" Checked="IsCheckedCheckAll_Checked" Unchecked="IsCheckedCheckAll_Checked"/>

最好使用绑定来完成此操作。

1.从IsCheckedCheckAll复选框中删除事件处理程序(选中、未选中)

2.其他复选框可以通过使用绑定表达式IsChecked="{binding IsChecked,ElementName=IsCheckedCheckAll,Mode=OneWay}"绑定到IsCheckedCheck All的IsChecked属性

 <CheckBox Content="Check all" Grid.Column="1" Grid.Row="1" Margin="200 7 0 0" Name="IsCheckedCheckAll" />
   <CheckBox Content="Exc1" Name="Exc1" IsChecked="{Binding IsChecked, ElementName=IsCheckedCheckAll, Mode=OneWay}" />

通过绑定将内容更改为Checked All、Unchecked All的一种方法是将布尔IsChecked属性映射到某些字符串内容。您可以通过编写下面这样的值转换器来实现这一点。

    namespace WpfApplication1
    {
        public class CheckedStatusToTextConverters : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                bool checkedStatus = (bool)value;
                return checkedStatus ? "Uncheck All" : "Check All";
            }
            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                throw new NotSupportedException();
            }
        }
    }

然后在XAML中,您可以使用类似的值转换器

<Window.Resources>
    <mycode:CheckedStatusToTextConverters x:Key="MyConverter" />
</Window.Resources>
<Grid>
    <CheckBox Content="{Binding IsChecked, Converter={StaticResource MyConverter}, RelativeSource={RelativeSource Self}}"/>