是否可以将ValueConverter与Inlines一起使用?我需要ListBox粗体中每一行的某些部分。
<TextBlock>
<TextBlock.Inlines>
<MultiBinding Converter="{StaticResource InlinesConverter}">
<Binding RelativeSource="{RelativeSource Self}" Path="FName"/>
</MultiBinding>
</TextBlock.Inlines>
</TextBlock>
它编译但我得到: 'MultiBinding'不能在'InlineCollection'集合中使用。 'MultiBinding'只能在DependencyObject的DependencyProperty上设置。
如果无法做到这一点,您建议采用什么方法将整个TextBlock传递给IValueConverter?
答案 0 :(得分:4)
正如其他人指出的那样,Inlines
不是Dependency Property
,这就是您收到错误的原因。当我在过去遇到类似情况时,我发现Attached Properties
/ Behaviors
是一个很好的解决方案。我将假设FName
的类型为string
,因此附加属性也是如此。这是一个例子:
class InlinesBehaviors
{
public static readonly DependencyProperty BoldInlinesProperty =
DependencyProperty.RegisterAttached(
"BoldInlines", typeof(string), typeof(InlinesBehaviors),
new PropertyMetadata(default(string), OnBoldInlinesChanged));
private static void OnBoldInlinesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var textBlock = d as TextBlock;
if (textBlock != null)
{
string fName = (string) e.NewValue; // value of FName
// You can modify Inlines in here
..........
}
}
public static void SetBoldInlines(TextBlock element, string value)
{
element.SetValue(BoldInlinesProperty, value);
}
public static string GetBoldInlines(TextBlock element)
{
return (string) element.GetValue(BoldInlinesProperty);
}
}
然后您可以通过以下方式使用它(my
是指向包含AttachedProperty
的命名空间的xml命名空间:
<TextBlock my:InlinesBehaviors.BoldInlines="{Binding FName}" />
上面的绑定可能是多重绑定,你可以使用转换器,或其他什么。 Attached Behaviors
非常强大,这似乎是一个使用它们的好地方。
此外,如果您感兴趣,请Attached Behaviors
{{1}}。
答案 1 :(得分:1)
我在寻找解决同一错误“我不能在'InlineCollection'集合中使用'MultiBinding'”的解决方案时遇到了这个问题。我的问题不是InLines
属性,但是为<TextBlock.Text>
定义MultiBinding
时,我无意中遗漏了TextBlock
标签。只是要检查您是否还会收到此错误。
答案 2 :(得分:0)
不,Inlines
不是DependencyProperty
- 这基本上就是错误信息所说的内容。