我有一個WPF DataGrid有一個AlternatingRowBackground筆刷。它被配置爲每隔一行着色。我想在鼠標懸停上做些事情,突出顯示當前行。然而,風格觸發器似乎失去了AlternatingRowBackground筆刷。我在鼠標上得到所需的行着色......但只在沒有用AlternatingRowBackground筆刷繪製的行上。WPF風格觸發DataGridRow背景顏色Trumped by AlternatingRowBackground筆刷
這裏是Windows.Resources的風格:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Skins/MainSkin.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
Value="Red" />
<Setter Property="FontWeight"
Value="ExtraBold" />
<Setter Property="Height"
Value="20" />
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</Window.Resources>
這裏是DataGrid中:
<DataGrid Margin="25,15,25,0"
VerticalAlignment="Top"
ItemsSource="{Binding DocumentTypeList}"
AutoGenerateColumns="False"
Height="500"
AlternationCount="2"
FrozenColumnCount="2"
AlternatingRowBackground="{DynamicResource AlternatingRow}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Abbreviation}"
Header="Abbreviation" />
<DataGridTextColumn Binding="{Binding Title}"
Header="Title" />
<DataGridTextColumn Binding="{Binding Fee}"
Header="Fee" />
<DataGridTextColumn Binding="{Binding SpecialInstructions}"
Header="Special Instructions" />
</DataGrid.Columns>
</DataGrid>
是否有申報的絕對贏家的方法嗎?這個問題是否是一個層次結構?在我看來,AlternatingRowBackground筆刷勝出,因爲它直接與聲明的最具體部分相關聯。
更新:下面是正確的語法,基於@瓦爾的指導:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Skins/MainSkin.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
Value="Red" />
<Setter Property="FontWeight"
Value="ExtraBold" />
<Setter Property="Height"
Value="20" />
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type DataGrid}">
<Setter Property="AlternatingRowBackground" Value="{DynamicResource AlternatingRow}"/>
</Style>
</ResourceDictionary>
</Window.Resources>
而且在DataGrid(減去AlternatingRowBackground刷):
<DataGrid Margin="25,15,25,0"
VerticalAlignment="Top"
ItemsSource="{Binding DocumentTypeList}"
AutoGenerateColumns="False"
Height="500"
AlternationCount="2"
FrozenColumnCount="2">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Abbreviation}"
Header="Abbreviation" />
<DataGridTextColumn Binding="{Binding Title}"
Header="Title" />
<DataGridTextColumn Binding="{Binding Fee}"
Header="Fee" />
<DataGridTextColumn Binding="{Binding SpecialInstructions}"
Header="Special Instructions" />
</DataGrid.Columns>
</DataGrid>
你絕對會走向正確的方向。我按照您的建議添加了Setter屬性...不是{x:Type DataGridRow},而是{x:Type DataGrid}的單獨樣式。這就是訣竅。 – 2010-09-01 04:48:38
謝謝!不知道爲什麼在DataGrid樣式中定義AlternatingRowBackground而不是在DataGrid.AlternatingRowBackground中直接允許觸發器工作,但我很高興它! – 2010-10-12 22:47:43