데이터 격자의 SelectedItem
속성을 사용해야합니다. 물론, SelectionUnit
는 "세포"
으로 설정되어 있지 않은지 확인이 시도 :
private void DataGridCell_GotFocus(object sender, EventArgs e)
{
DataGridCell cell = sender as DataGridCell;
myDatagrid.SelectedItem = cell.DataContext;
}
편집 :
데이터 그리드의 이름입니다
<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