C# 在运行时处理从dll加载的WPF用户控件中的路由事件

C# 在运行时处理从dll加载的WPF用户控件中的路由事件,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,我有一个WPF控件库,我成功地从主应用程序加载了它的程序集,并显示了我想要的用户控件。问题是我想为usercontrol处理键盘路由事件,但消息似乎从未到达它。忠告 我的情景 主应用程序窗口xaml: <Window x:Class="Apollo.Clock.UI.ClockWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://sc

我有一个WPF控件库,我成功地从主应用程序加载了它的程序集,并显示了我想要的用户控件。问题是我想为usercontrol处理键盘路由事件,但消息似乎从未到达它。忠告

我的情景 主应用程序窗口xaml:

<Window x:Class="Apollo.Clock.UI.ClockWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         ResizeMode="NoResize" WindowState="Maximized">
    <Grid>     
        <StackPanel x:Name="MainContainer"></StackPanel>
    </Grid>
</Window>
DefaultSkin xaml:

<UserControl x:Class="DefaultSkin"
Keyboard.PreviewKeyDown="Window_PreviewKeyDown">

只有当您按下usercontrol内的键时,它才会处理该事件

要设置焦点,可以使用以下选项:

激活用户控件句柄后,IsVisibleChanged:

myControl.IsVisibleChanged += SetKeyboardFocus;
并具有设置键盘焦点的方法:

void SetKeyboardFocus(object sender, DependencyPropertyChangedEventArgs e)
{
  IInputElement inputElement = sender as IInputElement;
  inputElement.Focusable = true;
  Keyboard.Focus(inputElement);
}

用户控件占据了窗口表面的孔,它不可能失去焦点。
myControl.IsVisibleChanged += SetKeyboardFocus;
void SetKeyboardFocus(object sender, DependencyPropertyChangedEventArgs e)
{
  IInputElement inputElement = sender as IInputElement;
  inputElement.Focusable = true;
  Keyboard.Focus(inputElement);
}