2010-03-09 27 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