2009-07-03 103 views
3

我有一個使用幾個命令和相應的鍵盤手勢, 可重複使用的用戶控件創建頁面/窗口輸入手勢(具體地逃生和Ctrl + 1 ...按Ctrl + 9)如何從用戶控制

現在,當我在多個位置使用此用戶控件時,我想在用戶控件中定義輸入手勢,只要焦點位於用戶控件中,該手勢就可以正常工作。但是,只要焦點在當前頁面/窗口內,我就需要它才能工作。

我該怎麼做,或者我真的必須在每個頁面上執行命令/輸入綁定?

回答

3

您可以處理UserControlLoaded事件,並沿着邏輯樹查找擁有的頁面/窗口,然後您可以在其中添加綁定。

例如

public partial class Bogus : UserControl 
{ 
    public Bogus() 
    { 
     Loaded += (s, e) => { HookIntoWindow(); }; 
     InitializeComponent(); 
    } 

    private void HookIntoWindow() 
    { 
     var current = this.Parent; 
     while (!(current is Window) && current is FrameworkElement) 
     { 
      current = ((FrameworkElement)current).Parent; 
     } 
     if (current != null) 
     { 
      var window = current as Window; 
      // Add input bindings 
      var command = new AlertCommand(); 
      window.InputBindings.Add(new InputBinding(command, new KeyGesture(Key.D1, ModifierKeys.Control))); 
     } 
    } 
}