2014-09-10 69 views
0

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

回答

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

2.其他复选框可以通过用isChecked =绑定表达式结合IsCheckedCheckAll的属性器isChecked“{结合器isChecked,的ElementName = IsCheckedCheckAll,模式=单向}”在那里你可以改变的内容,选中所有

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

的一种方式,未选中全部通过绑定是映射布尔财产器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}}"/> 
+0

这是好多了。如果我想要在主复选框上更改内容/文本,该怎么办?它应该说“全选”,如果没有选中,选中“取消全选”。我可以使用绑定吗? – States 2014-09-10 23:44:00

+1

你可以但不像上面的代码那么直接。但是如果你正在学习WPF,你最好习惯价值转换器。我将编辑上面的代码,并以其他不同的方式显示。 – 2014-09-10 23:50:56

+1

您也可以使用数据触发器切换文本。这是一个很好的教程,介绍如何使用它们http://www.wpf-tutorial.com/styles/trigger-datatrigger-event-trigger/ – joshwl2003 2014-09-11 18:44:10