画面に表示されていない行は仮想化されており、実際には存在しないため、この方法を使用して色付けすることはできません。以下のスタイルでは、プロパティ IsRed にバインドして、行を赤とデフォルトの色の間で切り替えます (これを、データグリッドのある from のリソースに入れます)。
<Style
TargetType="{x:Type dg:DataGridRow}"
BasedOn="{StaticResource {x:Type dg:DataGridRow}}">
<Style.Triggers>
<DataTrigger
Binding="{Binding ElementName=self, Path=IsRed}"
Value="True">
<Setter
Property="Background"
Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
フォームに IsRed という依存関係プロパティがあります。これは、INotifyPropertyChanged を実装する任意のプロパティにすることもできます (依存関係プロパティは変更を通知します)。
public Boolean IsRed {
get { return (Boolean)GetValue(IsRedProperty); }
set { SetValue(IsRedProperty, value); }
}
// Using a DependencyProperty as the backing store for IsRed. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IsRedProperty =
DependencyProperty.Register("IsRed", typeof(Boolean), typeof(Window1), new UIPropertyMetadata(false));
次に、私のxamlでは、上部に宣言があります
<Window
x:Class="Grids.Window1"
x:Name="self">
つまり、要素名バインディングで参照できます (便利な手法です)。
コードを概説したように、ボタンをクリックする必要があるのは次のとおりです。
private void Button_Click(object sender, RoutedEventArgs e) {
IsRed = !IsRed;
}