布尔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安全性后,您甚至可以selectTrue
和False
!
或者,也许是这样的:
<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; } } }