2012-03-30 25 views
6

我在我的WPF應用程序中有一個搜索屏幕。該屏幕在TabControl的TabItem中以UserControl的形式實現。當用戶切換到搜索選項卡時,我想讓焦點進入一個特定的字段。如何找出我的WPF應用程序中焦點的位置?

所以我增加了一個Loaded事件處理在XAML中用戶控件的標籤,我叫我想有在Loaded事件處理最初的重點控制的對焦方式。這很好,直到我升級了我今天使用的Telerik控制庫。現在,當我切換到搜索選項卡時,焦點不在我想要的字段中,但我無法分辨哪個控件具有焦點。

我想有重點的領域已經有其他原因的GotFocus & LostFocus事件處理程序。我記得在Win Forms中,LostFocus事件處理程序參數告訴你哪個控件將獲得焦點。所以我把一個斷點在我引發LostFocus處理&發現參數LostFocus事件處理程序中的WPF不包括信息。

我怎樣才能找出其中的重點是沒有把的GotFocus處理程序在我的用戶的每個控件去?

託尼

回答

5

您可以嘗試將您的斷點放在LostKeyboardFocus附加事件而不是LostFocus事件。它使用KeyboardFocusChangedEventArgs類,它具有顯示哪個元素具有焦點並且焦點在哪裏的屬性。

private void textBox1_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
{ 
    textBox1.Text = ((FrameworkElement)e.NewFocus).Name ; 
} 
+0

謝謝,這是我需要的。我無法輕鬆地知道焦點在哪裏,因爲它轉到了我在表單上的複選框,並通過在複選框的內部放置一個虛線框來顯示焦點。除非你真的在尋找它,否則它很難見到。至少,它在我的應用程序中。 – 2012-03-30 13:34:12

+0

@Tony我很高興它幫助。 – 2012-03-30 13:53:54

8

嘗試按標籤鍵,看看它是否可以幫助你找到對焦控制。

您還可以使用Snoop在此Q/A提示:Any tips on debugging focus issues in WPF?

對於初學者來說,探聽顯示當前聚焦元素和當前 FocusScope在狀態欄中。

你可以得到它向你展示所有的GotFocus和LostFocus事件:

1. Run your app. 
2. Run Snoop. 
3. Choose your app in the dropdown. 
4. Click the binoculars ("Snoop") button. 
5. On the right pane, click the Events tab. 
6. Click to bring down the dropdown. 
7. Scroll down to the Keyboard section and check GotKeyboardFocus, LostKeyboardFocus, and optionally the PreviewXXX events. 
8. Now do what you need to do to manipulate focus and watch the Snoop window. 

同樣可以跟蹤的FocusManager事件一樣。

+0

謝謝,我會在早上給它一個鏡頭。 – 2012-03-30 03:03:02

相關問題