2016-07-08 31 views
0

我有一个风格的窗口,我想重写一个DataGrid风格,所有数据网格在我的应用如何重写一个DataGrid风格

<Window.Resources>   
    <Style x:Name="dtgStyle" TargetType="{x:Type DataGridRow}"> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Background" Value="Transparent" /> 
      </Trigger> 

     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Background" Value="Blue" /> 
     </Trigger> 

      <Trigger Property="IsSelected" Value="False"> 
       <Setter Property="Background" Value="Transparent" /> 
      </Trigger> 
     </Style.Triggers> 

     <Setter Property="Background" Value="Transparent" /> 
     <Setter Property="Foreground" Value="White" /> 

    </Style> 
</Window.Resources> 

我吼声,这一切都工作,但我不得不申请

Style s = Resources["dtgStyle"] as Style; 
mydtg.Style = s; 

现在我不想把它应用到ALL dtgs。 最好的办法是自动将它应用于xaml。

感谢名单

---添加灰----

谢谢您的帮助。唯一的问题是,当数据网格失去焦点时,数据网格中的选定行会改变颜色,如下图所示(前景变为黑色)。

enter image description here

我已尝试添加各种属性,但没有任何工程。

此外,左边框变得更大胆(没有双关语意图)和更大。 任何想法如何解决它? 谢谢

+0

'的TargetType = “{x:类型DataGridRow}” '。它是DataGridRow风格,而不是DataGrid。它应该默认应用,因为没有明确的键 – ASh

+0

Thanx因此我将DatagridRow名称更改为dtrStyle并添加了 但现在如何添加正确的样式? – Patrick

+0

@Patrick您设置'TargetType =“{x:Type DataGridRow}”'的方式,您可以为'DataGrid'设置。最重要的是什么?你想要达到什么目的? – AnjumSKhan

回答

2

如果您需要FrameworkElement的默认样式,请声明它不带x:Key,仅适用于TargetType。

DataGridRow和DataGridCell都有IsSelected属性。不足以改变只为DataGridRow背景,它有DataGridCell做以及

<Style TargetType="{x:Type DataGrid}"> 
    <Setter Property="RowStyle" > 
     <Setter.Value> 
      <Style TargetType="{x:Type DataGridRow}" BasedOn="{StaticResource {x:Type DataGridRow}}"> 
       <Setter Property="Background" Value="Transparent" /> 
       <Setter Property="Foreground" Value="White" /> 

       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="Transparent" /> 
        </Trigger> 

        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="Background" Value="Orange" /> 
         <Setter Property="Foreground" Value="White" /> 
        </Trigger> 
       </Style.Triggers> 

      </Style> 
     </Setter.Value> 
    </Setter> 

    <Setter Property="CellStyle"> 
     <Setter.Value> 
      <Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource {x:Type DataGridCell}}"> 
       <Style.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="Background" Value="Orange" /> 
        </Trigger> 

        <DataTrigger Binding="{Binding IsKeyboardFocusWithin, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Value="False"> 
         <Setter Property="Foreground" Value="White"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Setter.Value> 
    </Setter> 
</Style> 

修复的前景在这里找到:DataGrid's selected row color when inactivehttps://stackoverflow.com/a/25204493/1506454

+0

感谢您的帮助,请看我的小(迟)编辑。 – Patrick

+0

@帕特里克,我更新了我的答案,修复了前景。我也用magnify看了截图。标题实际上没有改变其大小,只有颜色 – ASh

+0

像魅力thanx一样工作! – Patrick