激活后如何从我的复选框更改我的 DataGridHeader 的颜色?
How can I change the color of my DataGridHeader from my checkbox when this is activated?
我有一个 DatGrid,我希望当您激活 CheckBox 时,您可以在 xaml 代码中更改我的 DataGrid header 的颜色设置。我知道它适用于触发器,但我的 CheckBox 在 Stack 面板之外,我的 DataGrid 在其中,但在同一个 Dockpanel 中,我不知道如何以及在何处放置触发器事件。
我的代码的一部分:
我的数据网格:
<DataGrid.Resources>
<!--Design kopfzeile-->
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="#292F3B"/>
<Setter Property="Foreground" Value="LightBlue"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Height" Value="30"/>
<Setter Property="FontSize" Value="15"/>
<Setter Property="BorderThickness" Value="0,0,2,0" />
<Setter Property="BorderBrush" Value="#333333"/>
<Setter Property="Padding" Value="10 0 0 0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Border Background="#242A36">
<Border BorderThickness="1"
CornerRadius="6"
Background="#2D2D30"
Padding="10,0,0,0"
Margin="2">
<ContentPresenter/>
</Border>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
<!--Deaktivieren Des rowheader-->
<Style TargetType="{x:Type DataGridRowHeader}">
<Setter Property="Background" Value="Transparent"/>
</Style>
<!--Cellen Design-->
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="#292F3B"/>
<Setter Property="Foreground" Value="LightBlue"/>
<Setter Property="BorderThickness" Value="0,0,2,0" />
<Setter Property="BorderBrush" Value="#333333"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Background="#242A36">
<Border BorderThickness="1"
CornerRadius="6"
Background="#292F3B"
Padding="10,0,0,0"
Margin="2">
<ContentPresenter/>
</Border>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#454F5D"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
</DataGrid>
这是我的按钮:
<StackPanel>
<Dockpanel>
<CheckBox IsChecked="{Binding ElementName=lbUsers,Path=DataContext.IsChecked}" x:Name="checkBox" Content="CheckBox" VerticalAlignment="Center" Style="{DynamicResource CheckBoxStyle1}" Width="130" Height="24" RenderTransformOrigin="0.662,0.494"/>
</DockPanel>
</StackPanel>
如果您使用 DataTrigger
而不是 Trigger
,您可以访问在 DataGrid 外部定义的 CheckBox。此外,您似乎错误地将背景硬编码到 ControlTemplate 中,因此根据您要定位的边框背景,您需要将该背景设置为 TemplateBinding。
这是一个例子:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Border Background="{TemplateBinding Background}">
<Border BorderThickness="1"
CornerRadius="6"
Background="#2D2D30"
Padding="10,0,0,0"
Margin="2">
<ContentPresenter/>
</Border>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red"/>
</Trigger>
<DataTrigger Binding="{Binding ElementName=checkBox,Path=IsChecked}" Value="True">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
</Style.Triggers>
示例结果:
我有一个 DatGrid,我希望当您激活 CheckBox 时,您可以在 xaml 代码中更改我的 DataGrid header 的颜色设置。我知道它适用于触发器,但我的 CheckBox 在 Stack 面板之外,我的 DataGrid 在其中,但在同一个 Dockpanel 中,我不知道如何以及在何处放置触发器事件。
我的代码的一部分:
我的数据网格:
<DataGrid.Resources>
<!--Design kopfzeile-->
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="#292F3B"/>
<Setter Property="Foreground" Value="LightBlue"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Height" Value="30"/>
<Setter Property="FontSize" Value="15"/>
<Setter Property="BorderThickness" Value="0,0,2,0" />
<Setter Property="BorderBrush" Value="#333333"/>
<Setter Property="Padding" Value="10 0 0 0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Border Background="#242A36">
<Border BorderThickness="1"
CornerRadius="6"
Background="#2D2D30"
Padding="10,0,0,0"
Margin="2">
<ContentPresenter/>
</Border>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
<!--Deaktivieren Des rowheader-->
<Style TargetType="{x:Type DataGridRowHeader}">
<Setter Property="Background" Value="Transparent"/>
</Style>
<!--Cellen Design-->
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="#292F3B"/>
<Setter Property="Foreground" Value="LightBlue"/>
<Setter Property="BorderThickness" Value="0,0,2,0" />
<Setter Property="BorderBrush" Value="#333333"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Background="#242A36">
<Border BorderThickness="1"
CornerRadius="6"
Background="#292F3B"
Padding="10,0,0,0"
Margin="2">
<ContentPresenter/>
</Border>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#454F5D"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
</DataGrid>
这是我的按钮:
<StackPanel>
<Dockpanel>
<CheckBox IsChecked="{Binding ElementName=lbUsers,Path=DataContext.IsChecked}" x:Name="checkBox" Content="CheckBox" VerticalAlignment="Center" Style="{DynamicResource CheckBoxStyle1}" Width="130" Height="24" RenderTransformOrigin="0.662,0.494"/>
</DockPanel>
</StackPanel>
如果您使用 DataTrigger
而不是 Trigger
,您可以访问在 DataGrid 外部定义的 CheckBox。此外,您似乎错误地将背景硬编码到 ControlTemplate 中,因此根据您要定位的边框背景,您需要将该背景设置为 TemplateBinding。
这是一个例子:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Border Background="{TemplateBinding Background}">
<Border BorderThickness="1"
CornerRadius="6"
Background="#2D2D30"
Padding="10,0,0,0"
Margin="2">
<ContentPresenter/>
</Border>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red"/>
</Trigger>
<DataTrigger Binding="{Binding ElementName=checkBox,Path=IsChecked}" Value="True">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
</Style.Triggers>
示例结果: