2009-07-03 66 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))); 
     } 
    } 
}