gpt4 book ai didi

wpf - 如何在 Caliburn.Micro 中绑定(bind)按键手势?

转载 作者:行者123 更新时间:2023-12-04 02:54:18 27 4
gpt4 key购买 nike

如何让 Caliburn.Micro 将按键手势映射到 ViewModel 上的操作方法?

例如,我想实现一个选项卡式界面,并且我希望我的 ShellViewModel 有一个 NewTab 方法,用户应该能够通过按键盘上的 Ctrl+T 来调用该方法。

我知道完整的 Caliburn 框架支持手势,但是如何使用 Caliburn.Micro 来做到这一点?是否有某种方法可以将操作绑定(bind)到 RoutedCommand(因为 RoutedCommands 已经支持输入手势)?或者其他方式来获得手势支持?

最佳答案

我修改了example启用对全局键绑定(bind)的支持。
您只需将以下代码添加到您的 View 中:

<i:Interaction.Triggers>
<common:InputBindingTrigger>
<common:InputBindingTrigger.InputBinding>
<KeyBinding Modifiers="Control" Key="D"/>
</common:InputBindingTrigger.InputBinding>
<cl:ActionMessage MethodName="DoTheMagic"/>
</common:InputBindingTrigger>
</i:Interaction.Triggers>

并且每当按下 Ctr+D 时,都会执行 DoTheMagic 方法。这是修改后的 InputBindingTrigger 代码:
public class InputBindingTrigger : TriggerBase<FrameworkElement>, ICommand
{
public static readonly DependencyProperty InputBindingProperty =
DependencyProperty.Register("InputBinding", typeof (InputBinding)
, typeof (InputBindingTrigger)
, new UIPropertyMetadata(null));

public InputBinding InputBinding
{
get { return (InputBinding) GetValue(InputBindingProperty); }
set { SetValue(InputBindingProperty, value); }
}

public event EventHandler CanExecuteChanged = delegate { };

public bool CanExecute(object parameter)
{
// action is anyway blocked by Caliburn at the invoke level
return true;
}

public void Execute(object parameter)
{
InvokeActions(parameter);
}

protected override void OnAttached()
{
if (InputBinding != null)
{
InputBinding.Command = this;
AssociatedObject.Loaded += delegate {
var window = GetWindow(AssociatedObject);
window.InputBindings.Add(InputBinding);
};
}
base.OnAttached();
}

private Window GetWindow(FrameworkElement frameworkElement)
{
if (frameworkElement is Window)
return frameworkElement as Window;

var parent = frameworkElement.Parent as FrameworkElement;
Debug.Assert(parent != null);

return GetWindow(parent);
}
}

关于wpf - 如何在 Caliburn.Micro 中绑定(bind)按键手势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4181310/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com