我有一个名为TextBlock
的{{1}}。我有Price
可行。
DataTrigger
所以这意味着如果<DataTrigger Binding="{common:ComparisonBinding DataContext.Discount,GT,0}" Value="{x:Null}">
<DataTrigger.Setters>
<Setter Property="Text" TargetName="price">
<Setter.Value>
<Run>Value1</Run>
<Run>Value2</Run>
</Setter.Value>
</Setter>
</DataTrigger.Setters>
</DataTrigger>
它应该显示为Discount is > 0
在这里运行不起作用。我需要绑定,因为我需要不同的文本样式。
答案 0 :(得分:2)
正如xaml和@BasBrekelmans中的错误所说,您尝试将Run
元素分配给期望string
的属性。
根据您的要求,只需使用MultiBinding
和StringFormat
将您的绑定值格式化为所需的格式。
类似的东西:
<DataTrigger Binding="{common:ComparisonBinding DataContext.Discount,GT,0}"
Value="{x:Null}">
<Setter TargetName="price"
Property="Text">
<Setter.Value>
<MultiBinding StringFormat="Some Custom Formatted Text Value1: {0} and Value2: {1}">
<Binding Path="BindingValue1" />
<Binding Path="BindingValue2" />
</MultiBinding>
</Setter.Value>
</Setter>
</DataTrigger>
如果它是TextBlock
的视觉样式,你试图使用内联绑定进行调整,那么你最好用一个更好的元素修改你的控件的模板而不是单个TextBlock
来允许它。
但是,您可以使用转换器并将DataTrigger.Setter
应用于TextBlock.Tag
说出类似的话:
public class TextBlockInlineFormatConverter : IMultiValueConverter {
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) {
if (values.Length < 3)
return null;
TextBlock textblock = values[0] as TextBlock;
if (textblock == null)
return null;
textblock.ClearValue(TextBlock.TextProperty);
textblock.Inlines.Add(new Run("Some text ") { Foreground = Brushes.Tomato });
textblock.Inlines.Add(new Run(values[1].ToString()) { Foreground = Brushes.Blue });
textblock.Inlines.Add(new Run(" and Some other text ") { Foreground = Brushes.Tomato });
textblock.Inlines.Add(new Run(values[2].ToString()) { Foreground = Brushes.Blue, FontWeight = FontWeights.Bold });
return textblock.Tag;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}
和用法:
<DataTrigger Binding="{common:ComparisonBinding DataContext.Discount,GT,0}"
Value="{x:Null}">
<!-- Note the setter is on Tag and not Text since we modify the Text using Inlines within the converter -->
<Setter TargetName="price"
Property="Tag">
<Setter.Value>
<MultiBinding Converter="{StaticResource TextBlockInlineFormatConverter}"
Mode="OneWay">
<Binding Path="."
RelativeSource="{RelativeSource Self}" />
<Binding Path="BindingValue1" />
<Binding Path="BindingValue2" />
</MultiBinding>
</Setter.Value>
</Setter>
</DataTrigger>
只有在限制修改控件的模板tbh时才使用解决方法。
答案 1 :(得分:1)
Run
项的集合无法应用于Text
属性,这是一个字符串。正确的属性是Inlines
。
不幸的是,这个属性没有setter,应该有一种不同的解决方法,例如: ContentControl
中有两个TextBlock
的{{1}}。