がありDataGrid
、選択した行とフォーカスされた行を同期させたい。つまり、フォーカスされた行が変更された場合、選択された行が変更され、選択された行が変更された場合、それがフォーカスされた行になります。
次の XAML を含む WPF ウィンドウが与えられた場合、フォーカスされた行と選択された行を同期するにはどうすればよいですか?
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.Resources>
<x:Array x:Key="MyList" Type="sys:String" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>Hello</sys:String>
<sys:String>World</sys:String>
<sys:String>World</sys:String>
<sys:String>World</sys:String>
<sys:String>World</sys:String>
<sys:String>World</sys:String>
<sys:String>World</sys:String>
<sys:String>World</sys:String>
<sys:String>World</sys:String>
</x:Array>
<Style TargetType="{x:Type DataGrid}">
<Setter Property="AlternationCount" Value="2" />
<Setter Property="AutoGenerateColumns" Value="False"/>
</Style>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Focusable" Value="False"/>
</Style>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Focusable" Value="True"/>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="AlternationIndex" Value="0"/>
<Condition Property="IsSelected" Value="False"/>
</MultiTrigger.Conditions>
<Setter Property="Background" Value="White"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="AlternationIndex" Value="1"/>
<Condition Property="IsSelected" Value="False"/>
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Gainsboro"/>
</MultiTrigger>
<Trigger Property="AlternationIndex" Value="1">
<Setter Property="Background" Value="Gainsboro"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#BF228B22"/>
<Setter Property="BorderBrush" Value="ForestGreen"/>
<Setter Property="BorderThickness" Value="1"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<DataGrid ItemsSource="{StaticResource MyList}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
次の画像では、赤のフォーカス四角形と緑の選択された行が明らかに同期されていないことがわかります。これがデフォルトの動作だと思います。つまり、SelectedRow は常に Focused であり、FocusedRow は常に Selected です。