DataGridRowHeader IsPressed 事件不更改背景

问题描述 投票:0回答:1

我有一个

DataGridRowHeader
的自定义样式,并且触发器
IsPressed
似乎没有触发。不过
IsMouseOver
工作得很好。我基本上有相同的风格,它的触发器是
DataGridColumnHeader
,一切都很完美。

为什么 RowHeader 不起作用?有替代方案吗?

<Style x:Key="DataGridRowHeaderStyle1" TargetType="{x:Type DataGridRowHeader}">
    <Setter Property="Background" Value="{DynamicResource Theme.DataGrid.Background}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridRowHeader}">
                <Grid x:Name="gridRow">
                    <Border x:Name="Border"
                            Background="{TemplateBinding Background}" 
                            BorderBrush="{DynamicResource Theme.DataGrid.Border}" 
                            BorderThickness="0,0,1,1" 
                            Margin="0,0,0,0"/>
                    <ContentPresenter Margin="8,10,7,10" 
                                      VerticalAlignment="Center"/>
                    <Thumb x:Name="PART_TopHeaderGripper" 
                           VerticalAlignment="Top" 
                           Style="{StaticResource RowHeaderGripperStyle}"/>
                    <Thumb x:Name="PART_BottomHeaderGripper" 
                           VerticalAlignment="Bottom" 
                           Style="{StaticResource RowHeaderGripperStyle}"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" TargetName="Border" Value="{DynamicResource Theme.DataGrid.Highlight}"/>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="Background" TargetName="Border" Value="Red"/> <!-- This does not work -->
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

这里的触发器不会触发:

<Trigger Property="IsPressed" Value="True">
     <Setter Property="Background" TargetName="Border" Value="Red"/> <!-- This does not work -->
</Trigger>
wpf xaml triggers controltemplate
1个回答
0
投票

不幸的是,我无法重现这个问题。了解您正在使用哪个框架会很有帮助(我尝试了 .Net6 并且它在我的代码中工作)

我建议您尝试以下其中一项:

  • 将画笔设置为静态资源,如“红色”、“绿色”和“蓝色”(而不是动态资源),看看这是否有效。这可能是资源绑定问题。
  • 将“IsPressed”更改为“ButtonBase.IsPressed”
  • 根据经验,我通常不会对事件的顺序做出任何假设。在控件模板中,IsMouseOver 和 IsPressed 都会影响“Border”的背景画笔属性。您可以尝试向网格添加第二个边框,并将背景属性默认设置为 {x:null} 或“透明”。然后使用“IsPressed”事件来更改第二个边框的背景。
© www.soinside.com 2019 - 2024. All rights reserved.