0

プロジェクトのビルド時にこれを取得して、コンバーターで動作するカスタム バインディングを取得できません。

エラー 2 マークアップ拡張機能の解析中に、タイプ 'MS.Internal.Markup.MarkupExtensionParser+UnknownMarkupExtension' の不明なプロパティ 'Converter' が検出されました。

エラーは次のコードを指しています。

<KeyBinding 
        Key="{helper:KeyboardShortcut InsertTargetToSource, Converter={StaticResource KeyGestureConverterKey},ConverterParameter=Key}" 
        Modifiers="{helper:KeyboardShortcut InsertTargetToSource, Converter={StaticResource KeyGestureConverterKey},ConverterParameter=Modifiers}" 
        Command="{Binding CopyToTargetCommand}"/>

KeyboardShortCut は設定ファイルからのバインディングです:

public class KeyboardShortcutExtension : Binding
{
    public KeyboardShortcutExtension()
    {
        Initialize();
    }

    public KeyboardShortcutExtension(string path)
        : base(path)
    {
        Initialize();
    }

    private void Initialize()
    {
        this.Source = TI.Shortcuts.Default;
        this.Mode = BindingMode.TwoWay;
    }

}

そして、コンバーターは文字列 ("Ctrl+Shift+X" など) からキーと修飾子に変換します。

private KeyGestureConverter mConverter = new KeyGestureConverter();

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var text = value.ToString();
        var gesture = mConverter.ConvertFromInvariantString(text) as KeyGesture;
        if (parameter == "Key")
        {
            return gesture.Key;
        }
        if (parameter == "Modifiers")
        {
            return gesture.Modifiers;
        }
        return gesture;
    }

足りないものはありますか?または、設定ファイルの文字列から KeyBinding にバインドしようとするときに、別のアプローチを取る必要がありますか?

編集:

次のコードを使用すると、すべて正常に動作しますが、コードを読み取ることができません。これを自動的に生成する方法はありますか?

<MyKeyBinding Value="CopyToTargetCommand"/> 

そしてそれは残りを生成しますか?

<KeyBinding Command="{Binding CopyToTargetCommand}">
        <KeyBinding.Key>
            <helper:KeyboardShortcut Path="InsertTargetToSource" ConverterParameter="Key">
                <helper:KeyboardShortcut.Converter>
                    <StaticResource ResourceKey="KeyGestureConverterKey"/>
                </helper:KeyboardShortcut.Converter>
            </helper:KeyboardShortcut>
        </KeyBinding.Key>
        <KeyBinding.Modifiers>
            <helper:KeyboardShortcut Path="InsertTargetToSource" ConverterParameter="Modifiers">
                <helper:KeyboardShortcut.Converter>
                    <StaticResource ResourceKey="KeyGestureConverterKey"/>
                </helper:KeyboardShortcut.Converter>
            </helper:KeyboardShortcut>
        </KeyBinding.Modifiers>
    </KeyBinding>
4

1 に答える 1

0
class CustomizableKeyBinding : KeyBinding
{
    public CustomizableKeyBinding()
        : base()
    {
    }

    StringToKeyGestureConverter converter = new StringToKeyGestureConverter();

    public string Description
    {
        set
        {
            InitBindings(value);
        }
    }

    private void InitBindings(string value)
    {
        BindingOperations.SetBinding(this, KeyBinding.KeyProperty, new KeyboardShortcutExtension(value) { Converter = converter, ConverterParameter = "Key" });
        BindingOperations.SetBinding(this, KeyBinding.ModifiersProperty, new KeyboardShortcutExtension(value) { Converter = converter, ConverterParameter = "Modifiers" });
    }
}

その後、XAML で次のようにします。

 <helper:CustomizableKeyBinding Command="{Binding CopyToTargetCommand}" Description="..."/>
于 2012-09-11T07:53:59.153 に答える