DatagridRow的鼠标悬停不正常

时间:2014-06-30 17:16:29

标签: wpf xaml triggers

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

<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事件并不起作用。当我的鼠标在一行上时,行的背景为红色,但文本的前景在我的所有列上都保持黑色,但鼠标下的单元格除外,其中文本按预期变为白色。

但是当我的鼠标在一排上时,我想让我的所有线条前景变白。我的风格有什么问题?

谢谢

2 个答案:

答案 0 :(得分:1)

如果您暂时注释掉其他Style,您实际上会看到DataGridRow Style工作得很好......所选Background DataGridRow你需要的是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

因此,您需要更仔细地设置其他Style。逐个添加它们并偶尔运行程序以检查您的问题是否已经重新出现,如果有,只需撤消上一次或两次编辑,因为这是造成问题的原因。


更新&gt;&gt;&gt;

请再次阅读我的最后一段:

  

您需要更仔细地设置其他Style逐个添加并偶尔运行程序检查您的问题是否已经重新出现,如果有,只需撤消上一次或两次编辑,这就是造成你问题的原因。

逐个添加它们 意味着一次性添加整个DataGridCell Style,就像你明显做的那样。如果setter添加回DataGridCell Style 部分,那么您会注意到哪个setter导致你的问题。

答案 1 :(得分: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>

它正在工作:)