我目前有一个数据网格,其中包含另一个数据网格以显示父子关系。第二个网格有一列包含一个按钮,当点击时会显示另一个对话框。
当首次显示行的详细信息时,用户必须先单击一次子网格以获得焦点/激活它,然后再单击一次才能触发按钮单击事件。这只会在显示行的第一次发生。
就像第一次单击被表格吞噬了一样。 我尝试捕获RowDetailsVisibilityChanged事件来尝试聚焦按钮,但似乎仍未解决该问题。
有什么想法吗?
我目前有一个数据网格,其中包含另一个数据网格以显示父子关系。第二个网格有一列包含一个按钮,当点击时会显示另一个对话框。
当首次显示行的详细信息时,用户必须先单击一次子网格以获得焦点/激活它,然后再单击一次才能触发按钮单击事件。这只会在显示行的第一次发生。
就像第一次单击被表格吞噬了一样。 我尝试捕获RowDetailsVisibilityChanged事件来尝试聚焦按钮,但似乎仍未解决该问题。
有什么想法吗?
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}" BasedOn="{StaticResource {x:Type DataGridRow}}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="SelectRowDetails"/>
</Style>
</DataGrid.RowStyle>
private void SelectRowDetails(object sender, MouseButtonEventArgs e)
{
var row = sender as DataGridRow;
if (row == null)
{
return;
}
row.Focusable = true;
row.Focus();
var focusDirection = FocusNavigationDirection.Next;
var request = new TraversalRequest(focusDirection);
var elementWithFocus = Keyboard.FocusedElement as UIElement;
if (elementWithFocus != null)
{
elementWithFocus.MoveFocus(request);
}
}
它将焦点设置到行细节的内容上,解决了双击问题。
注意:这些都来自MSDN线程,不是我的解决方案。
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
base.OnPropertyChanged(e);
// to stop RowDetails from eating the first click.
if (e.Property.Name == "SelectedItem" && CurrentItem == null) CurrentItem = SelectedItem;
}
并且请在这里查找详细信息。