データグリッドのSelectedItem
プロパティを使用する必要があります。もちろん、SelectionUnit
は "セル"
に設定されていないことを確認し、これを試してみてください:
private void DataGridCell_GotFocus(object sender, EventArgs e)
{
DataGridCell cell = sender as DataGridCell;
myDatagrid.SelectedItem = cell.DataContext;
}
EDIT:
あなたのデータグリッドの名前がある
<Style TargetType="{x:Type DataGridCell}">
<EventSetter Event="GotFocus" Handler="DataGridCell_GotFocus"></EventSetter>
</Style>
myDatagrid
場合
もっと再利用可能なものが必要な場合は、添付された動作を使用することをお勧めします。
public static class MyBehaviours
{
public static bool GetIsCellRowSelected(DependencyObject obj)
{
return (bool)obj.GetValue(IsCellRowSelectedProperty);
}
public static void SetIsCellRowSelected(DependencyObject obj, bool value)
{
obj.SetValue(IsCellRowSelectedProperty, value);
}
public static readonly DependencyProperty IsCellRowSelectedProperty =
DependencyProperty.RegisterAttached("IsCellRowSelected",
typeof(bool), typeof(MyBehaviours),
new UIPropertyMetadata(false, OnIsCellRowSelected));
static void OnIsCellRowSelected(DependencyObject depObj, DependencyPropertyChangedEventArgs e)
{
DataGrid item = depObj as DataGrid;
if (item == null)
return;
if (e.NewValue is bool == false)
return;
if ((bool)e.NewValue)
item.SelectedCellsChanged += SelectRow;
else
item.SelectedCellsChanged -= SelectRow;
}
static void SelectRow(object sender, SelectedCellsChangedEventArgs e)
{
if (e.AddedCells.Count > 0)
{
DataGrid dg = sender as DataGrid;
var cell = e.AddedCells.Last();
dg.SelectedItem = cell.Item;
}
}
}
場合:これは、コードが
<Style TargetType="{x:Type DataGrid}">
<Setter Property="views:MyBehaviours.IsCellRowSelected" Value="true"></Setter>
</Style>
、それはデータグリッドのSelectedCellsChanged
イベントの変更を監視します。この場合、私は、データグリッド自体に使用される添付ビヘイビアを作成します複数のセルを選択すると、最後のセルの行が選択されます。必要に応じてこれを変更することができます。
残念ながら、私はこれを使用することはできません。イベントセッターを使用するには、スタイル用に宣言されたクラス名が必要です。これらのスタイルは複数のビューで共有されるため、クラス属性を持つことはできません。 –
こんにちは、私はそれを修正する答えを変更しました。私はそれを自分自身でテストしたので、私はそれが動作すると言うことができます。 – Natxo