【问题标题】:Uncheck not working on checkbox取消选中不工作复选框
【发布时间】:2014-09-10 23:08:50
【问题描述】:

我有一个复选框,当它被选中和被点击取消选中时应该起作用。选中时,应启用/确保选中其他复选框,取消选中时,应取消选中其他复选框。 检查时它工作正常。但是,当它未被选中时,什么也不会发生。所以我缺少类似“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;
            }
        }

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    您缺少 Unchecked 事件处理程序。

    所以将 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.其他 Checkbox 可以通过绑定表达式 IsChecked="{Binding IsChecked, ElementName=IsCheckedCheckAll, Mode=OneWay}" 绑定到 IsCheckedCheckAll 的 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}}"/>
    

    【讨论】:

    • 这样好多了。如果我希望在主复选框上更改内容/文本怎么办。如果未选中,则应显示“全部选中”,如果已选中,则应显示“全部取消选中”。我可以为此使用绑定吗?
    • 可以,但不如上面的代码那么直接。但是,如果您正在学习 WPF,您最好习惯使用值转换器。我将编辑上面的代码并展示其他不同的方法。
    • 您也可以使用数据触发器来切换文本。这是一个关于如何使用它们的很好的教程wpf-tutorial.com/styles/trigger-datatrigger-event-trigger
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2015-11-27
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    相关资源
    最近更新 更多