以编程方式添加KeyBindings命令

问题描述 投票:-1回答:1

我应该如何基于字符串以编程方式添加KeyBinding命令?在我的xaml代码中,我有类似下面的属性。

<KeyBinding Key="Q" Command="{Binding AcceptAndNextCommand}" />

这工作正常,但我希望能够动态添加这种键绑定,所以我希望能够以编程方式添加它们。我创建了一个项目设置文件,其中每个KeyBindings都是一个单独的行。这一行拥有一个字典值,我将每个键盘键保存为字典键,每个命令保存为字典值;例如:{"Key":"Q", "Value":"AcceptAndNextCommand"}。一个StringKeyBinding密钥转换工作正常,但我不知道如何基于String添加一个命令到KeyBinding。字典值中的所有命令字符串都看起来像“AcceptAndNextCommand”。我希望我可以使用CommandConverter cv来完成这项工作,如下面的示例所示,但这似乎不起作用。

private void KeyboardShortcuts()
    {
        foreach (SettingsProperty property in Properties.KeyboardBindings.Default.Properties)
        {
            var propertyValue = JsonConvert.DeserializeObject<Dictionary<string, string>>(
                Properties.KeyboardBindings.Default[property.Name].ToString());

            var keyBinding = new KeyBinding()
            {
                Key = (Key)new KeyConverter().ConvertFromString(propertyValue["Key"])
            };

            CommandConverter cv = TypeDescriptor.GetConverter(typeof(ICommand)) as CommandConverter;
            keyBinding.Command = (ICommand)cv?.ConvertFromString(propertyValue["Command"]);
        }
    }

我的实现基于以下question,但它并没有很好地解释命令的添加。

c# wpf mvvm-light
1个回答
1
投票

您可以使用BindingOperations.SetBinding方法以编程方式创建绑定:

KeyBinding kb = new KeyBinding();
BindingOperations.SetBinding(kb, KeyBinding.CommandProperty, new Binding("AcceptAndNextCommand"));
...
InputBindings.Add(kb);

绑定的路径只是一个string

© www.soinside.com 2019 - 2024. All rights reserved.