我不知道你是怎么想的sa_ddam213的答案是优雅的,它只是吓人。像RV1987建议的那样,转换器是正确的方法,但是你可以变得更聪明。
创建一个转换器,它需要一个布尔值并将其转换为在转换器定义中定义的选项。
public class BoolToObjectConverter : IValueConverter
{
public object TrueValue { get; set; }
public object FalseValue { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Convert.ToBoolean(value) ? TrueValue : FalseValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
定义转换器:
<local:BoolToObjectConverter x:Key="SendAsHtmlBoolToTextConverter"
TrueValue="HTML"
FalseValue="Plain Text"/>
并使用它:
<MultiBinding StringFormat="{}{0} - Message ({1})}">
<Binding ElementName="txtSubject" Path="Text" />
<Binding ElementName="biSendAsHtml" Path="IsChecked"
Converter="{StaticResource SendAsHtmlBoolToTextConverter}"/>
</MultiBinding>
如果你愿意,你甚至可以使TrueValue和FalseValue DependencyProperties支持绑定。
这看起来像一个非常通用的方式。荣誉和感谢! – SeToY 2013-03-07 22:28:12
稍作修改:如果您制作TrueValue和FalseValue属性对象而不是字符串,则它更具可重用性。例如,您可以使用颜色/笔刷来根据条件改变某种颜色。 – 2013-03-10 22:16:30
呵呵,我已经想到了这一点,并在我的应用程序中做到了这一点:P谢谢! – SeToY 2013-03-11 09:27:42