将ValueConverter与Inlines一起使用

时间:2013-05-24 14:50:30

标签: wpf

是否可以将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?

3 个答案:

答案 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 - 这基本上就是错误信息所说的内容。

See here for possible solutions