簡體   English   中英

將快捷方式從窗口傳播到 WPF 中的用戶控件

[英]Propagate shortcut from window to UserControls in WPF

我想使用 KeyBindings 在窗口級別捕獲快捷方式,然后引發一個事件,所有 UserControl 都可以以某種方式訂閱該事件,以便在發出快捷方式時得到通知。

我試圖在窗口上這樣做:

<Window.InputBindings>
        <KeyBinding Key="M"
                    Command="{x:Static someNamespace:RoutedCommands.ShortcutSingleKeyM}" />
</Window.InputBindings>

然后在用戶控件中添加 CommandBindings 以“捕獲”命令:

<UserControl.CommandBindings>
        <CommandBinding Command="{x:Static someNamespace:RoutedCommands.ShortcutSingleKeyM}" Executed="OnShortcutSingleKeyM"></CommandBinding>
</UserControl.CommandBindings>

UserControl 中的OnShortcutSingleKeyM方法沒有被擊中。 經過一些閱讀,我現在明白 RouteCommands 在樹上冒泡,這可能是這種方法不起作用的原因。

我需要 UserControl 才能監聽來自窗口的“OnShortcut”事件。 我目前正在以這種方式實現它:

  1. 向想要偵聽此類事件的每個用戶控件添加附加屬性。 讓容器通過更高級別的委托來通知用戶控件。

這有意義嗎? 我覺得我想得太多了,實現起來應該更簡單。

從 Window 沿着樹向下傳播到 UserControls 它不會工作(至少在沒有主要管道的情況下不會)。 我是這樣實現的:

  • View 監聽輸入(通過KeyBindingsKeyDown事件)。
  • View 擁有一個對象( ShortcutMcShortcutFace ),它允許 UserControls 訂閱OnShortcutEvent 一類的東西。
  • UserControls 公開類型為ShortcutMcShortcutFace 的DependencyProperties 視圖將其ShortcutMcShortcutFace實例傳遞給它們。 他們訂閱OnShortcutEvent
  • UserControls 以他們想要的任何方式處理OnShortcutEvent (參數包括快捷方式標識符)。

暫無
暫無

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

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