2010-10-11 119 views
3

嗨 我無法將重點放在控件的父項上。我有一個放置在畫布上的控件。 如果我單擊該控件,我需要在畫布上設置焦點以處理一些鍵盤事件。 然而儘管我試圖將焦點設置等,其連接到畫布不火的是wpf設置焦點問題

protected override void OnPreviewMouseDown(MouseButtonEventArgs e) 
     { 
      base.OnPreviewMouseDown(e); 
      Canvas designer = VisualTreeHelper.GetParent(this) as Canvas; 
      designer.Focus() ;//this doesn't work 
      Keyboard.Focus(designer); //this also doesn't work 


     } 

鍵盤事件。

+1

如果您將base.OnPreviewMouseDown(e)在呼叫的其餘部分之下調用,會發生什麼? – 2010-10-11 15:17:01

回答

11

確保畫布有FocusableIsEnabled都設置爲true。沒有這個,Focus()將會失敗。來自Focus()文檔:

要獲得專注,Focusable和IsEnabled必須都是true。

此外,由於你在一個PreviewMouseDown事件這樣做,你可能需要重新修改你的方法如下:

protected override void OnPreviewMouseDown(MouseButtonEventArgs e) 
{ 
    Canvas designer = VisualTreeHelper.GetParent(this) as Canvas; 
    designer.Focus() ;//this doesn't work 
    Keyboard.Focus(designer); //this also doesn't work 

    // Just in case something else is changing your focus as a result of a mouse event... 
    e.Handled = true; 
    base.OnPreviewMouseDown(e); 
} 
+0

我將這些屬性設置爲true,但我的事件仍然不會觸發。我重寫OnGotFocus方法來查看此事件是否觸發並且OnGotFocus觸發。但鍵盤事件不要 – george 2010-10-11 15:17:03

+0

@george:焦點()返回true? – 2010-10-11 15:17:21

+0

是的,它返回true – george 2010-10-11 15:17:56

-3

我使用My UserControl屬性:Background =「Transparent」。

+6

你能否請[編輯]解釋爲什麼這回答問題/它是如何工作的?僅限代碼答案[阻止](http://meta.stackexchange.com/q/148272/274165),因爲他們沒有教導解決方案。 – 2015-10-23 02:55:17

+0

我不知道爲什麼。我在另一個問題中讀到了這個。但我不記得在哪。 – wishmaster35 2015-10-23 22:22:47