2016-07-08 65 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