我有 4 个复选框,一个全部选中,另外三个是子复选框。当我选中全部选中时,我想选中所有三个子复选框,当我取消选中一个复选框时,主复选框全部选中将只被取消选中。
<Window x:Class="checkboxWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Height="350"
Width="525">
<Grid Name="grdOne">
<CheckBox Content="Check"
Checked="checkBox1_Checked"
Unchecked="checkBox1_Unchecked"
Height="16"
HorizontalAlignment="Left"
Margin="39,23,0,0"
Name="checkBox1"
VerticalAlignment="Top">
</CheckBox>
<CheckBox Content="One"
Unchecked="checkBox2_Unchecked"
IsChecked="{Binding Path=Ischecked, ElementName=checkBox1, Mode=TwoWay}"
Height="16"
HorizontalAlignment="Left"
Margin="117,67,0,0"
Name="checkBox2"
VerticalAlignment="Top" />
<CheckBox Content="Two"
Unchecked="checkBox3_Unchecked"
IsChecked="{Binding Path=Ischecked, ElementName=checkBox1, Mode=TwoWay}"
Height="16"
HorizontalAlignment="Left"
Margin="118,103,0,0"
Name="checkBox3"
VerticalAlignment="Top" />
<CheckBox Content="Three"
IsChecked="{Binding Path=Ischecked, ElementName=checkBox1, Mode=TwoWay}"
Height="16"
HorizontalAlignment="Left"
Margin="117,145,0,0"
Name="checkBox4"
VerticalAlignment="Top" />
<CheckBox Content="Four"
IsChecked="{Binding Path=Ischecked, ElementName=checkBox1, Mode=TwoWay}"
Height="16"
HorizontalAlignment="Left"
Margin="118,190,0,0"
Name="checkBox5"
VerticalAlignment="Top" />
</Grid>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void checkBox1_Checked(object sender, RoutedEventArgs e)
{
if (checkBox1.IsChecked == true)
{
checkBox2.IsChecked = true;
checkBox3.IsChecked = true;
}
}
private void checkBox1_Unchecked(object sender, RoutedEventArgs e)
{
//if (checkBox1.IsChecked == false)
//{
// checkBox2.IsChecked = false;
// checkBox3.IsChecked = false;
//}
}
private void checkBox2_Unchecked(object sender, RoutedEventArgs e)
{
if (checkBox2.IsChecked == false)
{
checkBox1.IsChecked = false;
}
}
private void checkBox3_Unchecked(object sender, RoutedEventArgs e)
{
if (checkBox3.IsChecked == false)
{
checkBox1.IsChecked = false;
}
}
}
最佳答案
我的 CheckBox grid
看起来像:
<Grid Name="grdOne">
<CheckBox Content="Check" Height="16" HorizontalAlignment="Left" Margin="24,44,0,0" Name="checkBox1" VerticalAlignment="Top" Checked="checkBox1_Checked" Unchecked="checkBox1_Unchecked" />
<CheckBox Content="One" Height="16" HorizontalAlignment="Left" Margin="64,77,0,0" Name="checkBox2" VerticalAlignment="Top" Checked="checkBox1_Checked" Unchecked="checkBox1_Unchecked" />
<CheckBox Content="Two" Height="16" HorizontalAlignment="Left" Margin="64,99,0,0" Name="checkBox3" VerticalAlignment="Top" Unchecked="checkBox1_Unchecked" Checked="checkBox1_Checked" />
<CheckBox Content="Three" Height="16" HorizontalAlignment="Left" Margin="64,121,0,0" Name="checkBox4" VerticalAlignment="Top" Checked="checkBox1_Checked" Unchecked="checkBox1_Unchecked" />
<CheckBox Content="Four" Height="16" HorizontalAlignment="Left" Margin="64,143,0,0" Name="checkBox5" VerticalAlignment="Top" Checked="checkBox1_Checked" Unchecked="checkBox1_Unchecked" />
</Grid>
我有两个事件,一个用于checked
,另一个用于unchecked
:
bool m_bChkUpdating = false;
bool m_bUnChkUpdating = false;
private void checkBox1_Checked(object sender, RoutedEventArgs e)
{
CheckBox chk = (CheckBox)sender;
if (!m_bChkUpdating)
{
m_bChkUpdating = true;
switch (chk.Name)
{
case "checkBox1":
checkBox2.IsChecked = true;
checkBox3.IsChecked = true;
checkBox4.IsChecked = true;
checkBox5.IsChecked = true;
break;
default:
// chk.IsChecked = true;
if (checkBox2.IsChecked == true &&
checkBox3.IsChecked == true &&
checkBox4.IsChecked == true &&
checkBox5.IsChecked == true)
{
checkBox1.IsChecked = true;
}
else
{
checkBox1.IsChecked = false;
}
break;
}
m_bChkUpdating = false;
}
}
private void checkBox1_Unchecked(object sender, RoutedEventArgs e)
{
CheckBox chk = (CheckBox)sender;
if (!m_bUnChkUpdating)
{
m_bUnChkUpdating = true;
switch (chk.Name)
{
case "checkBox1":
checkBox2.IsChecked = false;
checkBox3.IsChecked = false;
checkBox4.IsChecked = false;
checkBox5.IsChecked = false;
break;
default:
// chk.IsChecked = false;
if (checkBox2.IsChecked == false ||
checkBox3.IsChecked == false ||
checkBox4.IsChecked == false ||
checkBox5.IsChecked == false)
{
checkBox1.IsChecked = false;
}
else
{
checkBox1.IsChecked = true;
}
break;
}
m_bUnChkUpdating = false;
}
}
关于c# - WPF 多复选框选中/取消选中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16117251/