【c#】CheckBox

一、Style

1、style1

1.1 效果

未选中状态
选中状态

1.2 代码

    <Style x:Key="CheckBoxStyle" TargetType="{x:Type CheckBox}">
        <Setter Property="FocusVisualStyle">
            <Setter.Value>
                <Style>
                    <Setter Property="Control.Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Rectangle Margin="2" SnapsToDevicePixels="True" Stroke="#2196f3" StrokeThickness="1" StrokeDashArray="1 2" />
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Setter.Value>
        </Setter>
        <Setter Property="Background" Value="White" />
        <Setter Property="BorderBrush" Value="#cccccc" />
        <Setter Property="Foreground" Value="#000" />
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type CheckBox}">
                    <Grid x:Name="templateRoot" Background="Transparent" SnapsToDevicePixels="True">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <Border Height="14" Width="14" x:Name="checkBoxBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"
                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="1" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" CornerRadius="3">
                            <Grid x:Name="markGrid">
                                <Path x:Name="optionMark" Data="F1M9.97498,1.22334L4.6983,9.09834 4.52164,9.09834 0,5.19331 1.27664,3.52165 4.255,6.08833 8.33331,1.52588E-05 9.97498,1.22334z"
                                        Fill="#fff" Margin="1" Opacity="0" Stretch="None" />
                                <Rectangle x:Name="indeterminateMark" Fill="#FF212121" Margin="2" Opacity="0" />
                            </Grid>
                        </Border>
                        <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="1"
                                ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="HasContent" Value="True">
                            <Setter Property="FocusVisualStyle">
                                <Setter.Value>
                                    <Style>
                                        <Setter Property="Control.Template">
                                            <Setter.Value>
                                                <ControlTemplate>
                                                    <Rectangle Margin="14,0,0,0" SnapsToDevicePixels="True" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1"
                                                            StrokeDashArray="1 2" />
                                                </ControlTemplate>
                                            </Setter.Value>
                                        </Setter>
                                    </Style>
                                </Setter.Value>
                            </Setter>
                            <Setter Property="Padding" Value="4,-1,0,0" />
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" TargetName="checkBoxBorder" Value="#FFF3F9FF" />
                            <Setter Property="BorderBrush" TargetName="checkBoxBorder" Value="#FF5593FF" />
                            <Setter Property="Fill" TargetName="optionMark" Value="#FF212121" />
                            <Setter Property="Fill" TargetName="indeterminateMark" Value="#FF212121" />
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Background" TargetName="checkBoxBorder" Value="#FFE6E6E6" />
                            <Setter Property="BorderBrush" TargetName="checkBoxBorder" Value="#FFBCBCBC" />
                            <Setter Property="Fill" TargetName="optionMark" Value="#FF707070" />
                            <Setter Property="Fill" TargetName="indeterminateMark" Value="#FF707070" />
                        </Trigger>
                        <Trigger Property="IsPressed" Value="True">
                            <Setter Property="Background" TargetName="checkBoxBorder" Value="#FFD9ECFF" />
                            <Setter Property="BorderBrush" TargetName="checkBoxBorder" Value="#FF3C77DD" />
                            <Setter Property="Fill" TargetName="optionMark" Value="#FF212121" />
                            <Setter Property="Fill" TargetName="indeterminateMark" Value="#FF212121" />
                        </Trigger>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="Opacity" TargetName="optionMark" Value="1" />
                            <Setter Property="Opacity" TargetName="indeterminateMark" Value="0" />
                            <Setter Property="Background"  Value="#0064e6"/>
                            <Setter Property="BorderBrush"  Value="#0064e6"/>
                        </Trigger>
                        <Trigger Property="IsChecked" Value="{x:Null}">
                            <Setter Property="Opacity" TargetName="optionMark" Value="0" />
                            <Setter Property="Opacity" TargetName="indeterminateMark" Value="1" />
                            <Setter Property="Background" Value="#FFF"/>
                            <Setter Property="BorderBrush" Value="#cccccc"/>
                        </Trigger>

                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsChecked" Value="True"></Condition>
                                <Condition Property="IsEnabled" Value="False"></Condition>
                            </MultiTrigger.Conditions>
                            <Setter Property="Background" Value="#e5e5e5"></Setter>
                            <Setter Property="BorderBrush" Value="#cccccc"></Setter>
                            <Setter Property="Fill" TargetName="optionMark" Value="#999999" />
                            <!--<Setter Property="Opacity" TargetName="optionMark" Value="0"></Setter>-->
                        </MultiTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

二、功能实现

1、DataGrid添加一键全选CheckBox

1.1 xaml

<DataGridTemplateColumn Width="55*">
	<!-- 一定要设置HeaderStyle -->
  <DataGridTemplateColumn.HeaderStyle>
         <Style TargetType="DataGridColumnHeader">
             <Setter Property="SnapsToDevicePixels" Value="True" />
             <Setter Property="Foreground" Value="#000" />
             <Setter Property="HorizontalContentAlignment" Value="Center" />
             <Setter Property="FontSize" Value="12" />
             <Setter Property="FontWeight" Value="Bold" />
             <Setter Property="Cursor" Value="Hand" />
             <Setter Property="Height" Value="25" />
             <Setter Property="Background" Value="Transparent" />
             <Setter Property="BorderThickness" Value="0"></Setter>
             <Setter Property="BorderBrush" Value="#ddd"></Setter>
         </Style>
     </DataGridTemplateColumn.HeaderStyle>
     <DataGridTemplateColumn.HeaderTemplate>
         <DataTemplate>
             <CheckBox x:Name="All_CheckBox"  IsChecked="{Binding DataContext.AllChecked,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type UserControl}}}" VerticalAlignment="Center" HorizontalAlignment="Center" Style="{DynamicResource CheckBoxStyle}" Click="All_CheckBox_Click"></CheckBox>
         </DataTemplate>
     </DataGridTemplateColumn.HeaderTemplate>
     <DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
             <CheckBox x:Name="Sub_CheckBox" Tag="{Binding UserId}" VerticalAlignment="Center" HorizontalAlignment="Center" Style="{DynamicResource CheckBoxStyle}" Checked="Sub_CheckBox_Checked" Unchecked="Sub_CheckBox_Unchecked"></CheckBox>
           
         </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
 </DataGridTemplateColumn>

1.2 All_CheckBox_Click

 private void All_CheckBox_Click(object sender, RoutedEventArgs e)
 {
 	CheckBox headerCheckBox = sender as CheckBox;
 	if(headerCheckBox == null)
 		return;
 	//第一列checkBox模板列
 	DataGridTemplateColumn templeteColumn = grid.Columns[0] as DataGridTemplateColumn;
 	if(templeColumn == null)
 		return;
 	foreach(var item in grid.Items)//grid DataGrid
 	{
		FrameworkElement frElement = templeteColumn.getCellContent(item);
		if(frElement != null)
		{
			CheckBox subCheckBox = frElement.CellTemplete.FindName("Sub_CheckBox", frElement) as CheckBox;
			if(subCheckBox !=null)
			{
				if(headerCheckBox.IsChecked == true)
				{
					subCheckBox.IsChecked = true;
					SelectedSet.Add(long.Parse(subCheckBox.Tag.ToString()));//HashSet<T> 可以对选择项ids进一步进行操作
				}
				else
				{
					subCheckBox.IsChecked = false;
					if(SelectedSet!=null && SelectedSet.Count>0)
						SelectedSet.Clear();//清掉存储Set
				}


			}

		}
	
	}











}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值