2013-03-21 154 views
1

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

这里是基本样式看起来像在Blend:

Blend DataGrid Style

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

文本的颜色

现在这里是相同的风格是什么样子的Visual Studio 2012:

VS Datagrid Style

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

这里是单元格样式:

<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

在此先感谢

回答

1

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

编辑: 看到这里的风格,太长,张贴DataGridStyle

+0

JKing,最终的模板是什么?谢谢! – Rachael 2013-04-25 00:50:27

+0

@ UB3571,我编辑了我的答案,包括我的datagridstyle – 2013-04-28 14:26:53

1

您好我想你的风格和我的机器把ForegroundColor变成绿色...... 但是,如果它在你的DevEnvironment doesn't的工作,你可以尝试重写SystemColor为选定的行文本!

添加到您的风格和删除触发

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

感谢,我一直在这几个小时,单独添加和删除样式和资源字典,看看是否有任何冲突。我把你的想法并在Visual Studio中创建了一个新的WPF项目,并且这个样式在新项目中完美运行。所以我从当前项目中一次一个地将所有样式资源添加到新项目中,以查看是否发生冲突或更改。没有!即使将所有样式作为资源包含在内,该样式仍可在新项目中运行。有没有办法窥探WPF应用程序,以确切地看到什么样式被应用到元素? – 2013-03-21 16:26:42

+0

我已经试过了程序snoop,但是找不到它告诉我正在应用什么样式的地方。它只是告诉我元素属性的值 – 2013-03-21 16:27:50