我正在使用MVVM WPF,当我点击另一个DataGrid时,我需要失去焦点,所以我在一个DataGrid中只选择了一行。
或者如果有可能,当我点击DataGrids外面时会失去焦点?但是当我想点击DataGrid中所选行的编辑按钮时,它是否会失去焦点?
protected override void OnLostFocus(System.Windows.RoutedEventArgs e)
{
base.OnLostFocus(e);
this.SelectedItems.Clear();
this.SelectedItem = null;
}
这是我的OnLostFocus,但我不知道如何捕捉xaml中的点击 (我在xaml中真的很新)
更新:我可以以某种方式使用样式触发器从一个DataGrid聚焦到另一个吗?
答案 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();
}