2012-12-17 53 views
8

如何讓我的RowStyleAlternatingRowBackground之後得到應用?我希望IsOrangetrue的項目具有Orange背景,無論交替排列的行背景如何,目前情況並非如此。WPF DataGrid AlternatingRowBackground和RowStyle優先

XAML:

<DataGrid Name="g" 
    AlternatingRowBackground="Blue" 
    AlternationCount="2" 
    ... 
    SelectionMode="Single"> 
    <DataGrid.RowStyle> 
     <Style TargetType="DataGridRow"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsOrange}" Value="Y"> 
        <Setter Property="Background" Value="Orange" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.RowStyle> 
    ... 
</DataGrid> 
+0

IsOrange屬性位於哪裏,它直接位於窗口上下文? – MoHaKa

+0

我有一個viewmodel SomethingWhichCanBeOrangeViewModel具有布爾IsRange屬性。我的網格有它的ItemsSource設置爲ObservableCollection 。 – user1514042

+0

好的,所以你確定你的財產可以在你的DataGrid中訪問。 – MoHaKa

回答

12

這不是一個錯誤。在Style中,您無法覆蓋爲交替行設置的本地值。這就是爲什麼這是不行的

<DataGrid AlternatingRowBackground="Blue" 

但是,如果你在一個Style設置AlternatingRowBackground可以

<DataGrid.Style> 
    <Style TargetType="DataGrid"> 
     <Setter Property="AlternatingRowBackground" Value="Blue"/> 
    </Style> 
</DataGrid.Style> 

感謝this answer

+0

同意的種類,但是反過來說,交替行bg在樣式之後被應用。 – user1514042

+0

謝謝!這正是我正在尋找的解決方案。 –

2

在我的程序中,除了包含一個DataGird的主窗口之外,我還有兩個類。讓我們先從第一類:

MyClass.cs:

public class MyClass 
{ 
    public bool IsOrange { get; set; } 

    public string Name { get; set; } 
} 

我只有兩個屬性,IsOrange指定該行是否應該橙色。 ((不關心其他屬性))

現在視圖模型類只包含MyClass的集合。

MyClassViewModel.cs:

public class MyClassViewModel 
{ 
    public ObservableCollection<MyClass> con { get; set; } 

    public MyClassViewModel() 
    { 
     con = new ObservableCollection<MyClass>(); 

     con.Add(new MyClass { IsOrange = true, Name = "Aa" }); 
     con.Add(new MyClass { IsOrange = true, Name = "Bb" }); 
     con.Add(new MyClass { IsOrange = false, Name = "Cc" }); 
     con.Add(new MyClass { IsOrange = false, Name = "Dd" }); 
     con.Add(new MyClass { IsOrange = false, Name = "Ee" }); 
     con.Add(new MyClass { IsOrange = true, Name = "Ff" }); 
     con.Add(new MyClass { IsOrange = true, Name = "Gg" }); 
     con.Add(new MyClass { IsOrange = false, Name = "Hh" }); 
    } 
} 

在MainWindow.xaml:

<Grid> 
    <DataGrid Margin="10" ItemsSource="{Binding Path=con}" > 
     <DataGrid.RowStyle> 
      <Style TargetType="DataGridRow"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=IsOrange}" Value="true"> 
         <Setter Property="Background" Value="Orange" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </DataGrid.RowStyle> 
    </DataGrid> 
</Grid> 

終於在MainWindow.xaml.cs:

public partial class MainWindow : Window 
{ 
    MyClassViewModel VM = new MyClassViewModel(); 

    public MainWindow() 
    { 
     InitializeComponent(); 

     DataContext = VM; 
    } 
} 

,這是結果:

enter image description here

你可以給我您的電子郵件發送給您的應用程序。

好運:)