取消选中不复选框

时间:2014-09-10 23:08:50

标签: c# wpf

我有一个复选框,当它被选中时以及单击它取消选中时应该起作用。选中它时,应启用/确保选中其他复选框,如果未选中,则应取消选中其他复选框。 选中它时工作正常。但是当它没有被检查时,没有任何反应。所以我错过了像“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;
            }
        }

1 个答案:

答案 0 :(得分:3)

您缺少未经检查的事件处理程序。

所以将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 checbox中删除事件处理程序(Checked,Unchecked)

2.其他复选框可以使用绑定表达式绑定到IsCheckedCheckAll的IsChecked属性IsChecked =“{Binding IsChecked,ElementName = IsCheckedCheckAll,Mode = OneWay}”

 <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的一种方法是,通过绑定取消选中是将布尔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中你可以像这样使用Value Converter

<Window.Resources>
    <mycode:CheckedStatusToTextConverters x:Key="MyConverter" />
</Window.Resources>

<Grid>
    <CheckBox Content="{Binding IsChecked, Converter={StaticResource MyConverter}, RelativeSource={RelativeSource Self}}"/>