单击另一个DataGrid时如何失去对DataGrid的关注?

时间:2015-09-23 14:26:32

标签: c# wpf mvvm datagrid

我正在使用MVVM WPF,当我点击另一个DataGrid时,我需要失去焦点,所以我在一个DataGrid中只选择了一行。

This is my recent state

或者如果有可能,当我点击DataGrids外面时会失去焦点?但是当我想点击DataGrid中所选行的编辑按钮时,它是否会失去焦点?

protected override void OnLostFocus(System.Windows.RoutedEventArgs e)
{
  base.OnLostFocus(e);
  this.SelectedItems.Clear();
  this.SelectedItem = null;
}

这是我的OnLostFocus,但我不知道如何捕捉xaml中的点击 (我在xaml中真的很新)

更新:我可以以某种方式使用样式触发器从一个DataGrid聚焦到另一个吗?

2 个答案:

答案 0 :(得分:1)

尝试:

 datagrid1.UnselectAll();
 datagrid2.Focus();

更新: 您可以使用MouseEnter事件而不是覆盖LostFocus,如下所示:

  private void dataGrid1_MouseEnter(object sender, MouseEventArgs e)
    {
        dataGrid2.UnselectAll();
    }

    private void dataGrid2_MouseEnter(object sender, MouseEventArgs e)
    {
        dataGrid1.UnselectAll();
    }

XAML:

   <DataGrid  Focusable="True" Name="dataGrid1" MouseEnter="dataGrid1_MouseEnter" ItemsSource="{Binding}" SelectionUnit="Cell" CanUserDeleteRows="False" CanUserAddRows="False" CanUserReorderColumns="False" CanUserSortColumns="True" Margin="217,0,0,0"  />
    <DataGrid  Focusable="True" Name="dataGrid2" MouseEnter="dataGrid2_MouseEnter" ItemsSource="{Binding}" SelectionUnit="Cell" CanUserDeleteRows="False" CanUserAddRows="False" CanUserReorderColumns="False" CanUserSortColumns="True" Margin="10,-10,343,10"  />

答案 1 :(得分:1)

我在后面的代码中修复了它。这就像一个魅力! (使用MouseDown它不能正常工作,我不知道为什么)

 public override void OnApplyTemplate()
{
  base.OnApplyTemplate();

  dataGrid = GetTemplateChild("dataGrid") as DataGrid;
  dataGrid.MouseUp += new MouseButtonEventHandler(dataGrid_MouseUp);
  docGrid = GetTemplateChild("docGrid") as DataGrid;
  docGrid.MouseUp += new MouseButtonEventHandler(docGrid_MouseUp);
}

public void dataGrid_MouseUp(object sender, MouseEventArgs e)
{
  docGrid.UnselectAll();
}

public void docGrid_MouseUp(object sender, MouseEventArgs e)
{
  dataGrid.UnselectAll();
}