问题描述
我有一个 DatGrid,我希望当您激活 CheckBox 时,您可以在 xaml 代码中更改我的 DataGrid 标题的颜色设置。我知道它可以与触发器一起使用,但我的 CheckBox 在我的 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,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"
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" />
<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"
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"
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>
示例结果: