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