2010-03-09 26 views
6

我们正在使用WPF并且有一个从DockingLibrary派生的窗口。这个窗口有一个网格,其中有多个项目,其中一个是WPF数据网格。我们正在使用M-V-VM模式。当创建并显示此windown时,将不会选择此数据网格中的任何行。我们可以将行设置为突出显示,方法如下:确定谁关注WPF窗口

SharedWindow.ShipmentWin.shipmentDataGrid.SelectedIndex = 0; 

这会导致数据网格中的第一行显示为突出显示。但是,并不总是有其中之一,这一行不是选中,也没有焦点。我试图在该行设置IsSelected和焦点在:

SharedWindow.ShipmentWin.ShipVM.IsSelected = true; 
    bool focused = SharedWindow.ShipmentWin.shipmentDataGrid.Focus(); 

我要对这个完全错误的,是有一些其他的方式来选择DataGrid中的第一行,并设置焦点呢?通常,创建数据网格时,直到用户鼠标单击所需的行时才会选择任何行。

任何想法将不胜感激。

的感谢!

回答

9

看看FocusManager。它允许您通过SetFocusedElement方法将焦点设置到另一个UI元素。此外,它还允许您确定应用程序中当前有焦点的元素,这可以方便地调试焦点问题。 Snoop也可能有用。它显示底部状态栏中当前的焦点元素。

如果您使用WPF工具包中的DataGrid,请准备好查找与焦点处理相关的一些错误。有些已经解决了recently

+0

谢谢Olli!我现在就来看看这个。 – 2010-03-09 17:06:10

+0

这就是我一直在寻找的东西,但即使你指出我朝着正确的方向前进,也并不容易。我需要在onload方法中设置代码来设置焦点,如: Keyboard.Focus(shipmentDataGrid); 其中shipmentDataGrid是我的键盘快捷键的所有者。 – 2010-03-11 13:44:46

0

这也是值得理解逻辑重点键盘焦点之间的差异,这是非常不同的动物。 .Focus()方法有时只设置逻辑焦点 - 这可能不是你想要的。

方法的documentation告诉你,如果设置了键盘焦点,将返回true,否则返回false

+0

谢谢丹!你确实是对的,这是我没有意识到的。这是我需要设置的键盘焦点。 – 2010-03-11 13:45:35