Ось ще один підхід, коли ви визначаєте власні розширення розмітки, які повертають True
або False
(або будь-яке інше значення, яке ви бажаєте). Тоді ви просто використовуєте їх прямо в XAML, як і будь-яке інше розширення розмітки:
public class TrueExtension : MarkupExtension {
public override object ProvideValue(IServiceProvider serviceProvider) => true;
}
public class FalseExtension : MarkupExtension {
public override object ProvideValue(IServiceProvider serviceProvider) => false;
}
public class DoubleExtension : MarkupExtension {
public DoubleExtension(){};
public DoubleExtension(double value) => Value = value;
public double Value { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider) => Value;
}
Потім ви використовуєте їх таким чином (припускаючи, що імпортований простір імен є mx
):
<KeyBinding Key="Enter"
Command="{Binding ReturnResultCommand}"
CommandParameter="{mx:True}" />
<Button Visibility="{Binding SomeProperty,
Converter={SomeBoolConverter},
ConverterParameter={mx:True}}">
<Button Visibility="{Binding SomeProperty,
Converter={SomeDoubleConverter},
ConverterParameter={mx:Double 42.5}}">
Я фактично визначаю безліч власних MarkupExtension
класів для багатьох загальних речей, які я не хочу зберігати в своїх ресурсах.