布尔CommandParameter在XAML中

我有这个代码(工作正确):

<KeyBinding Key="Enter" Command="{Binding ReturnResultCommand}"> <KeyBinding.CommandParameter> <s:Boolean> True </s:Boolean> </KeyBinding.CommandParameter> </KeyBinding> 

“s”当然是System命名空间。

但是这个命令被调用了好几次,而且真的会增加一些简单的XAML代码。 这是否真的是XAML中布尔命令参数的最短表示法(​​除了将命令拆分为几个命令)?

我不知何故倾向于不读取问题…无论如何,这可能是一个黑客,但你可以派生自KeyBinding类:

 public class BoolKeyBinding : KeyBinding { public bool Parameter { get { return (bool)CommandParameter; } set { CommandParameter = value; } } } 

用法:

 <local:BoolKeyBinding ... Parameter="True"/> 

另一个不是很奇怪的解决scheme:

 xmlns:s="clr-namespace:System;assembly=mscorlib" 
 <Application.Resources> <!-- ... --> <s:Boolean x:Key="True">True</s:Boolean> <s:Boolean x:Key="False">False</s:Boolean> </Application.Resources> 

用法:

 <KeyBinding ... CommandParameter="{StaticResource True}"/> 

最简单的是在资源中定义以下内容

 <System:Boolean x:Key="FalseValue">False</System:Boolean> <System:Boolean x:Key="TrueValue">True</System:Boolean> 

并使用它像:

 <Button CommandParameter="{StaticResource FalseValue}"/> 

我只是发现了一个更通用的解决scheme,这个标记扩展:

 public class SystemTypeExtension : MarkupExtension { private object parameter; public int Int{set { parameter = value; }} public double Double { set { parameter = value; } } public float Float { set { parameter = value; } } public bool Bool { set { parameter = value; } } // add more as needed here public override object ProvideValue(IServiceProvider serviceProvider) { return parameter; } } 

用法(“wpf:”是扩展名所在的命名空间):

 <KeyBinding Key="F8" Command="{Binding SomeCommand}" CommandParameter="{wpf:SystemType Bool=True}"/> 

inputBool=并input安全性后,您甚至可以selectTrueFalse

或者,也许是这样的:

 <Button.CommandParameter> <s:Boolean>True</s:Boolean> </Button.CommandParameter> 

其中s是命名空间:

  xmlns:s="clr-namespace:System;assembly=mscorlib" 

也许类似

 <KeyBinding Key="Enter" Command="{Binding ReturnResultCommand}" CommandParameter="{x:Static StaticBoolean.True}" /> 

其中StaticBoolean

 public static class StaticBoolean { public static bool True { get { return true; } } } 
Interesting Posts