2016-01-27 111 views
0

我正在擴展控制畫布併爲MouseEvents添加我自己的自定義覆蓋。我很想知道爲什麼這個基本的覆蓋是當用戶按下鍵盤上的任何鍵時它不會發出信號。我怎樣才能讓這個重寫在wpf c#中工作?wpf擴展控件與鍵盤覆蓋

namespace CanvasGraphDemo 
{ 
    public class CanvasGraph : Canvas 
    { 
     public CanvasGraph() 
     { 
     } 

     protected override void OnKeyDown(KeyEventArgs e) 
     { 
      base.OnKeyDown(e); 
      if (e.Key == Key.Enter) 
      { 
       Console.WriteLine("context menu open"); 
       e.Handled = true; 
      } 
     } 

    } 
} 
+0

該控件必須有重點。你可以測試這個:'' –

+0

這也可以幫助你:http://stackoverflow.com/questions/347724 /何燦I-捕獲的keydown事件上-A-WPF的頁面或-用戶控件對象 –

回答

3

這將適用於您的具體示例。正如其他人指出的那樣,您必須使Canvas可以集中並實際上將其聚焦,因此它將接收鍵盤事件。

public class CanvasGraph : Canvas 
{ 
    public CanvasGraph() 
    { 
     Focusable = true; 
     Loaded += OnCanvasGraphLoaded; 
    } 

    private void OnCanvasGraphLoaded(object sender, RoutedEventArgs routedEventArgs) 
    { 
     Focus(); 
     Loaded -= OnCanvasGraphLoaded; 
    } 

    protected override void OnKeyDown(KeyEventArgs e) 
    { 
     base.OnKeyDown(e); 
     if (e.Key == Key.Enter) 
     { 
      Console.WriteLine("context menu open"); 
      e.Handled = true; 
     } 
    } 
}