WPF 转换器属性
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17290409/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 09:04:20 来源:igfitidea点击:
WPF Converter Property
提问by David Ward
I have a converter that in code I can set a property like:
我有一个转换器,我可以在代码中设置一个属性,如:
tabAssumptions.SetBinding(UIElement.VisibilityProperty, new Binding("CurrentPhase.IsWholeScheme") { Converter = new BoolToVisibilityConverter { Inverse = true } });
How can I set the Inverse property of the converter when used in XAML?
在 XAML 中使用时,如何设置转换器的 Inverse 属性?
回答by Phil
My BoolToVisibilityConverter is below. You can either use it as a resource:
我的 BoolToVisibilityConverter 如下。您可以将其用作资源:
<converters:BoolToVisibilityConverter x:Key="FalseToHidden"
TrueValue="Visible" FalseValue="Hidden" />
or use it as a MarkupExtension inline in your XAML:
或将其用作 XAML 中的内联 MarkupExtension:
Visibility="{Binding MyFlag,
Converter={vc:BoolToVisibilityConverter
FalseValue=Collapsed, TrueValue=Visible}}"
C#
C#
public class BoolToVisibilityConverter : BoolToValueConverter<Visibility>
{
#region Constructors and Destructors
public BoolToVisibilityConverter()
{
this.TrueValue = Visibility.Visible;
this.FalseValue = Visibility.Collapsed;
}
#endregion
}
/// <summary>
/// Use as the base class for BoolToXXX style converters
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class BoolToValueConverter<T> : MarkupExtension, IValueConverter
{
#region Constructors and Destructors
protected BoolToValueConverter()
{
this.TrueValue = default(T);
this.FalseValue = default(T);
}
#endregion
#region Public Properties
public T FalseValue { get; set; }
public T TrueValue { get; set; }
#endregion
#region Public Methods and Operators
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
return System.Convert.ToBoolean(value) ? this.TrueValue : this.FalseValue;
}
// Override if necessary
public virtual object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
return value.Equals(this.TrueValue);
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
#endregion
}

