在 C# 中单击 SelectAll 时选中所有复选框
CheckAll checkboxes when SelectAll is clicked in c#
我有一个动态列表框,如何在单击 select所有按钮时 select 列表框中的所有复选框。
Xaml :
StackPanel Width="400" Orientation="Horizontal" Grid.Row="0">
<!--<CheckBox IsThreeState="True" x:Name="cbAllFeatures" Width="111" Content="Select all" Height="78"/>-->
<AppBarButton x:Name="Btn_SelectAll" Margin="20,0,0,0" Label="Select All" Icon="SelectAll" Click="Btn_SelectAll_Click" FontWeight="Bold" />
<AppBarButton x:Name="Btn_Delete" Margin="100,0,0,0" Label="Delete All" Icon="Delete" Click="DeleteAll_Click" FontWeight="Bold" />
</StackPanel>
<ListBox x:Name="listBoxobj" ItemsSource="{Binding}" Background="Transparent" Margin="6" Height="auto" BorderThickness="2" MaxHeight="580" Grid.Row="1" SelectionChanged="listBoxobj_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Width="330" Height="100" >
<Border Margin="5" BorderBrush="White" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<CheckBox Name="Option1CheckBox" Grid.Row="0" Grid.Column="0" IsChecked="{Binding Checked,Mode=TwoWay}" VerticalAlignment="Center" Margin="5,0,0,0" />
<TextBlock x:Name="NameTxt" Grid.Row="0" Grid.Column="1" TextWrapping="Wrap" Text="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Left" FontSize="22" Foreground="White"/>
<TextBlock x:Name="Age" Grid.Row="1" Grid.Column="1" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="White" FontSize="22" Text="{Binding Age}" />
<Button Grid.Row="0" Grid.Column="2" x:Name="deleteTaskButton" BorderThickness="0" Margin="0" Click="deleteTaskButton_Click" Height="18" IsEnabled="False">
<Image Source="/Assets/delete.png"/>
</Button>
</Grid>
</Border>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我试过用这种方法做,但好像不行。
class SelectAll : INotifyPropertyChanged
{
public bool _Checked = false;
public bool Checked
{
get
{
return _Checked;
}
set
{
if (value != _Checked)
{
_Checked = value;
NotifyPropertyChanged("Checked");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
单击 select_all 时的代码。
public void Btn_SelectAll_Click(object sender, RoutedEventArgs e)
{
obj_check._Checked = true;
}
我的想法是使用 for 循环。它必须检查每个项目。但我不知道如何检查,因为我不能 select Checkbox.Any 感谢帮助。
试试这个
首先创建这个函数:
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (T childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
}
创建一个新布尔值:
bool Cheacked = false;
然后在您的按钮上添加:
if (!Cheacked)
{
IEnumerable<CheckBox> _CheackBox = FindVisualChildren<CheckBox>(this);
foreach (CheckBox _CB in _CheackBox)
{
_CB.IsChecked = true;
}
}
else
{
IEnumerable<CheckBox> _CheackBox = FindVisualChildren<CheckBox>(this);
foreach (CheckBox _CB in _CheackBox)
{
_CB.IsChecked = false;
}
}
它将获取 window 中的所有对象,然后将它们标记为已选中
我有一个动态列表框,如何在单击 select所有按钮时 select 列表框中的所有复选框。
Xaml :
StackPanel Width="400" Orientation="Horizontal" Grid.Row="0">
<!--<CheckBox IsThreeState="True" x:Name="cbAllFeatures" Width="111" Content="Select all" Height="78"/>-->
<AppBarButton x:Name="Btn_SelectAll" Margin="20,0,0,0" Label="Select All" Icon="SelectAll" Click="Btn_SelectAll_Click" FontWeight="Bold" />
<AppBarButton x:Name="Btn_Delete" Margin="100,0,0,0" Label="Delete All" Icon="Delete" Click="DeleteAll_Click" FontWeight="Bold" />
</StackPanel>
<ListBox x:Name="listBoxobj" ItemsSource="{Binding}" Background="Transparent" Margin="6" Height="auto" BorderThickness="2" MaxHeight="580" Grid.Row="1" SelectionChanged="listBoxobj_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Width="330" Height="100" >
<Border Margin="5" BorderBrush="White" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<CheckBox Name="Option1CheckBox" Grid.Row="0" Grid.Column="0" IsChecked="{Binding Checked,Mode=TwoWay}" VerticalAlignment="Center" Margin="5,0,0,0" />
<TextBlock x:Name="NameTxt" Grid.Row="0" Grid.Column="1" TextWrapping="Wrap" Text="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Left" FontSize="22" Foreground="White"/>
<TextBlock x:Name="Age" Grid.Row="1" Grid.Column="1" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="White" FontSize="22" Text="{Binding Age}" />
<Button Grid.Row="0" Grid.Column="2" x:Name="deleteTaskButton" BorderThickness="0" Margin="0" Click="deleteTaskButton_Click" Height="18" IsEnabled="False">
<Image Source="/Assets/delete.png"/>
</Button>
</Grid>
</Border>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我试过用这种方法做,但好像不行。
class SelectAll : INotifyPropertyChanged
{
public bool _Checked = false;
public bool Checked
{
get
{
return _Checked;
}
set
{
if (value != _Checked)
{
_Checked = value;
NotifyPropertyChanged("Checked");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
单击 select_all 时的代码。
public void Btn_SelectAll_Click(object sender, RoutedEventArgs e)
{
obj_check._Checked = true;
}
我的想法是使用 for 循环。它必须检查每个项目。但我不知道如何检查,因为我不能 select Checkbox.Any 感谢帮助。
试试这个
首先创建这个函数:
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (T childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
}
创建一个新布尔值:
bool Cheacked = false;
然后在您的按钮上添加:
if (!Cheacked)
{
IEnumerable<CheckBox> _CheackBox = FindVisualChildren<CheckBox>(this);
foreach (CheckBox _CB in _CheackBox)
{
_CB.IsChecked = true;
}
}
else
{
IEnumerable<CheckBox> _CheackBox = FindVisualChildren<CheckBox>(this);
foreach (CheckBox _CB in _CheackBox)
{
_CB.IsChecked = false;
}
}
它将获取 window 中的所有对象,然后将它们标记为已选中