簡體   English   中英

處理在運行時從dll加載的WPF用戶控件中的路由事件

[英]Handle Routed Events in WPF user control loaded from a dll at runtime

我有一個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>

從主應用程序窗口加載用戶控件:

UserControl myControl = null;
Assembly asm = Assembly.LoadFrom("AppUI.WPF.dll");
Type[] tlist = asm.GetTypes();
foreach (Type t in tlist){
    if (t.FullName == "DefaultSkin"){
        myControl = Activator.CreateInstance(t) as UserControl;
        MainContainer.Children.Add(myControl);
        break;
    }
}

DefaultSkin xaml:

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

DefaultSkin.cs

private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
            e.Handled = true;
            //more code
}

只有在按下usercontrol中的某個鍵時,它才會處理該事件。

要設置焦點,您可以使用以下內容:

激活用戶控件后,IsVisibleChanged:

myControl.IsVisibleChanged += SetKeyboardFocus;

並有SetKeyboardFocus方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM