【问题标题】:DatagridRow's mouseover not working properlyDatagridRow 的鼠标悬停无法正常工作
【发布时间】:2014-06-30 17:16:29
【问题描述】:

我的数据网格有以下样式:

<Style x:Key="StyleDataGrid" TargetType="{x:Type DataGrid}">
        <Setter Property="SelectionMode" Value="Single" />
        <Setter Property="SelectionUnit" Value="FullRow" />
        <Setter Property="CanUserAddRows" Value="False" />
        <Setter Property="AutoGenerateColumns" Value="False" />
        <Setter Property="BorderThickness" Value="0" />
        <Setter Property="CanUserResizeColumns" Value="True" />
        <Setter Property="GridLinesVisibility" Value="Horizontal" />
        <Setter Property="HorizontalGridLinesBrush" Value="Black" />
        <Setter Property="CanUserReorderColumns" Value="False" />
        <Setter Property="HeadersVisibility" Value="Column" />
        <Setter Property="CanUserDeleteRows" Value="False" />
        <Setter Property="Padding" Value="8"/>
    </Style>
    <Style TargetType="{x:Type DataGridCell}">
        <Setter Property="Padding" Value="5" />
        <Setter Property="BorderBrush" Value="Transparent" />
        <Setter Property="FontSize" Value="14" />
        <Setter Property="FontFamily" Value="Helvetica" />
        <Setter Property="Foreground" Value="Black"/>
        <Setter Property="FocusVisualStyle" Value="{x:Null}" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridCell}">
                    <Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
                            <ContentPresenter.ContentTemplate>
                                <DataTemplate>
                                    <TextBlock Background="Transparent" Name="text" TextTrimming="CharacterEllipsis"
                                Height="auto" Width="auto" Text="{Binding Text}"/>
                                </DataTemplate>
                            </ContentPresenter.ContentTemplate>
                        </ContentPresenter>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter  Property="Background" Value="Red"/>
                <Setter Property="Foreground" Value="White" />
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
                <!--<Setter Property="ToolTip" Value="{Binding Content.Text, RelativeSource={RelativeSource Self}}"/>-->
                <Setter Property="Background" Value="Orange"/>
                <Setter Property="Foreground" Value="White" />
            </Trigger>
        </Style.Triggers>
    </Style>
    <Style TargetType="{x:Type DataGridRow}">
        <Setter Property="Margin" Value="0"/>
        <Setter Property="BorderBrush" Value="Transparent" />
        <Setter Property="HorizontalAlignment" Value="Stretch" />
        <Setter Property="Background" Value="{StaticResource CouleurFond}" />
        <Setter Property="Foreground" Value="{StaticResource ResourceKey=CouleurTexte}" />
        <Setter Property="Padding" Value="5"/>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="Red"/>
                <Setter Property="Foreground" Value="White" />
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Orange"/>
                <Setter Property="Foreground" Value="White" />
            </Trigger>
        </Style.Triggers>
    </Style>

但是我的 DataGridRow 上的 mouseOver 事件不起作用。当我的鼠标悬停在一行上时,该行的背景为红色,但文本的前景在我的所有列上仍为黑色,但鼠标下方的单元格除外,其中文本按预期变为白色。

但是当我的鼠标悬停在一行上时,我希望我的行的所有前景都是白色的。我的风格有什么问题?

谢谢

【问题讨论】:

    标签: wpf xaml triggers


    【解决方案1】:

    诀窍是添加这些行来管理我的 DataGridCell 的鼠标悬停事件:

    <DataTrigger Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Value="True">
                <Setter Property="Background" Value="{StaticResource ResourceKey=CouleurBoutonHover}"/>
                <Setter Property="Foreground" Value="{StaticResource ResourceKey=CouleurTexteBoutonHover}" />
            </DataTrigger>
    

    它正在工作:)

    【讨论】:

      【解决方案2】:

      如果您暂时注释掉您的其他Styles,您会发现实际上,您的DataGridRow Style 工作得很好......所选DataGridRowBackground 是您需要的Orange

      <Style TargetType="{x:Type DataGridRow}">
          <Setter Property="Margin" Value="0"/>
          <Setter Property="BorderBrush" Value="Transparent" />
          <Setter Property="HorizontalAlignment" Value="Stretch" />
          <Setter Property="Background" Value="{StaticResource CouleurFond}" />
          <Setter Property="Foreground" Value="{StaticResource ResourceKey=CouleurTexte}" />
          <Setter Property="Padding" Value="5"/>
          <Style.Triggers>
              <Trigger Property="IsSelected" Value="True">
                  <Setter Property="Background" Value="Red"/>
                  <Setter Property="Foreground" Value="White" />
              </Trigger>
              <Trigger Property="IsMouseOver" Value="True">
                  <Setter Property="Background" Value="Orange"/>
                  <Setter Property="Foreground" Value="White" />
              </Trigger>
          </Style.Triggers>
      </Style
      

      因此,您需要更仔细地设置您的其他Styles。逐部分添加它们并偶尔继续运行程序以检查您的问题是否再次出现,如果有,只需撤消最后一两次编辑,因为那是导致问题的原因。


      更新>>>

      请再读一遍我的最后一段:

      您需要更仔细地设置您的其他Styles。 逐部分添加并偶尔继续运行程序以检查您的问题是否再次出现,如果有,只需撤消上一两次编辑,因为那是是什么导致了您的问题。

      逐部分添加是否意味着像您显然所做的那样一次性添加整个DataGridCell Style。如果您setters 添加回DataGridCell Style部分,那么您会注意到哪个setter 给您带来了问题。 p>

      【讨论】:

      • 谢谢。另外,有没有办法绑定 dataGridRow 父级的鼠标悬停?
      • DataGridRow 的父级指的是什么?
      • 我的意思是 DataGridRow,其中包含鼠标悬停的 DataGridCell
      • 那你在说什么?再次查看您的代码示例并再次阅读我的答案...这正是此代码的作用...如前所述,您的DataGridRow Style 工作正常...所选DataGridRowBackgroundOrange,如您所愿(鼠标悬停)。
      • 是的,但我也想设置我的 DataGridCells 的前景,但是当鼠标悬停在行上时,我希望我所有行的前景都变为白色。这现在不起作用,因为我设置了单元格的前景。这就是为什么我问也许我们可以在父鼠标上添加一个触发器以在鼠标悬停在同一行的单元格上时更改前景。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 2016-04-27
      • 1970-01-01
      • 2023-04-01
      • 2021-01-05
      相关资源
      最近更新 更多