当它被激活时,如何从我的复选框更改我的 DataGridHeader 的颜色?

问题描述

我有一个 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>

示例结果:

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...