1

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

这是 Blend 中的基本样式:

混合 DataGrid 样式

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

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

VS 数据网格样式

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

这是单元格样式:

<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>

因此您可以看到将绿色标记为前景色的触发器在混合中有效,但在视觉工作室中无效。我认为这是一种系统颜色,它以某种方式覆盖了触发器,但我不确定如何追踪它。

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

这是整个数据网格样式资源字典的链接

提前致谢

4

2 回答 2

1

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

编辑:在此处查看样式,太长无法发布DataGridStyle

于 2013-03-26T05:22:57.950 回答
1

嗨,我尝试了您的样式,在我的机器上,前景颜色更改为绿色......但如果它在您的 DevEnvironment 中不起作用,您可以尝试覆盖所选行文本的 SystemColor!

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

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Green" />
于 2013-03-21T08:07:03.923 回答