WPF数据网格样式选定行

时间:2013-03-21 07:11:19

标签: wpf xaml visual-studio-2012 wpfdatagrid expression-blend

我有一个wpf 4.5应用程序,它在usercontrol中有一个datagrid。我在Blend中为datagrid设计了样式,但是当我将样式复制到我的VS 2012项目中时,它无法正常工作。

以下是Blend中的基本样式:

Blend DataGrid Style

请注意所选行(绿色)中文本的颜色以及正在编辑的文本框周围的填充

现在,这就是Visual Studio 2012的相同样式:

VS Datagrid Style

因此,所选行中突出显示的文本与背景颜色相同(使其不可见),我无法更改文本框bordercolor或margin以匹配混合样式。

这是单元格样式:

<Style TargetType="{x:Type DataGridCell}">
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Border x:Name="border"
                        BorderBrush="Transparent"
                        BorderThickness="1"
                        Background="Transparent"
                        SnapsToDevicePixels="True"
                        Margin="15,10,15,10">
                    <ContentPresenter Name="CellContent" SnapsToDevicePixels="True" />
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Foreground" Value="Green"/>
                    </Trigger>
                    <Trigger Property="IsKeyboardFocusWithin" Value="True">
                        <Setter Property="BorderBrush" TargetName="border" Value="#FFD8D8D8"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>                
        </Setter.Value>
    </Setter>
</Style>

所以你可以看到触发器标记为绿色,因为foregorund颜色在混合而不是视觉工作室中工作。我认为它是一种系统颜色覆盖触发器的一些方式,但我不知道如何跟踪它。

有人可以通过设置选定的行文字颜色和文本框边框/边距来帮助我纠正这种风格问题。

This is a link to the entire datagrid style resource dictionary

提前致谢

2 个答案:

答案 0 :(得分:1)

嗨我尝试了你的风格,在我的机器上ForegroundColor改为Green ... 但如果它在您的DevEnvironment中不起作用,您可以尝试覆盖所选行文本的SystemColor!

将此添加到您的样式并删除触发器

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Green" />

答案 1 :(得分:1)

所以事实证明这是DataGridCell风格的冲突。我将DataGridCell样式应用于所有datagrid单元格而没有键名。然后我基于上面提到的那个创建了另一个单元格样式但是出于某种原因,如果我尝试将这种单元格样式应用于数据网格中的特定列声明,则样式将会中断。所以我不得不删除“基于样式”并找到另一种方法来进行列特定格式化。

编辑: 看这里的风格,发帖DataGridStyle

太长了