C# 键盘快捷键在调用第二个 XAML 窗口后停止工作

2024-04-16

我有一个针对不同实例使用多个 XAML 窗口的软件:例如,为了导出一些信息,我创建了格式与母软件不同的辅助 XAML 窗口。他们工作得很好。

我的问题是,如果我使用我的软件而不调用任何这些辅助 XAML 窗口,则快捷方式可以很好地工作。但一旦我调用这个新的 XAML 窗口,快捷方式就不再起作用了。我需要重新启动程序才能让他们活着回来。

关于这种行为有任何线索吗? 此外,我还无法创建像 CTRL+Letter 这样的快捷方式。我看过很多代码,看起来很简单,但它们就是不起作用......

Code

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    Key key = e.Key;


    if ((key == Key.Left) && previousButton.IsEnabled)
        button_PreviewMouseDown(previousButton, null);
    else if ((key == Key.Right) && nextButton.IsEnabled)
        button_PreviewMouseDown(nextButton, null);
    //New Label
    else if (key == Key.L)
        //else if (key == Key.LeftAlt && e.Key.ToString() == "L")
        NewLabel_Click(sender, e);
    // Begin Event
    else if (key == Key.B)
        BeginEvent_Click(sender, e);
    // End Event
    else if (key == Key.E)
        EndEvent_Click(sender, e);
    // Delete Label
    else if (key == Key.K)
        DeleteLabel_Click(sender, e);
    else if (key == Key.R)
        // Delete Event
        DeleteEvent_Click(sender, e);
    // Edit Label
    else if (key == Key.I)
        EditLabel_Click(sender, e);
    // Edit Event
    else if (key == Key.F)
        EditEvent_Click(sender, e);
}

EDIT 1

我现在发现,只要我调用一个 C# 弹出消息框,只说“事件创建成功”,快捷方式就会再次活跃起来!

MessageBox.Show("Event Created");

知道为什么会发生这种情况吗?


另一种方法是使用路由命令。 使用您分配的 RoutedCommand关键手势.

example

/// <summary>
/// Save Log command
/// </summary>
public static readonly RoutedCommand SaveLog =
    new RoutedCommand("SaveLog", typeof(Commands),
        new InputGestureCollection 
        {
            new KeyGesture(Key.S, ModifierKeys.Control,"Save log contents to a file. (Ctl+S)")
        });

在 xaml 中分配 RoutedCommand

            <Button Style="{StaticResource LoggingWindowSaveLogButton}" Command ="{x:Static local:Commands.SaveLog}" />

将命令绑定到您的窗口

    <!-- Command Bindings-->
<Window.CommandBindings>
    <CommandBinding Command="{x:Static local:Commands.SaveLog}" Executed="SaveLogCommand" CanExecute="SaveLogCommandCanExecute"/>
</Window.CommandBindings>

然后实施保存日志命令可以执行 and 保存日志命令

如果 SaveLogCommandCanExecute 返回false它将自动禁用 RoutedCommand 绑定到的任何 GUI。

请记住具有键绑定的窗口MUST有重点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 键盘快捷键在调用第二个 XAML 窗口后停止工作 的相关文章

随机推荐