如何使用标记扩展在XAML中编写值对象?

Ser*_*hov 3 wpf xaml

我想替换

<Button Text="Foo" Command="{Binding Foo}">
    <Button.CommandParameter>
        <System:Boolean>True</System:Boolean>
    </Button.CommandParameter>
</Button>
Run Code Online (Sandbox Code Playgroud)

喜欢的东西

<Button ... CommandParameter="{???}"/>
Run Code Online (Sandbox Code Playgroud)

ito*_*son 9

您可以通过从MarkupExtension类派生并实现ProvideValue方法来编写标记扩展:

public class BooleanValueExtension : MarkupExtension
{
  private readonly bool _value;

  public BooleanValueExtension(bool value)
  {
    _value = value;
  }

  public override object ProvideValue(IServiceProvider serviceProvider)
  {
    return _value;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用大括号语法来使用它:

<Button CommandParameter="{local:BooleanValue True}" />
Run Code Online (Sandbox Code Playgroud)