3

Is it possible to use ValueConverter with Inlines? I need some parts of the every line in a ListBox bolded.

<TextBlock>
  <TextBlock.Inlines>
     <MultiBinding Converter="{StaticResource InlinesConverter}">
        <Binding RelativeSource="{RelativeSource Self}" Path="FName"/>
     </MultiBinding>
  </TextBlock.Inlines>  
</TextBlock>

It compiles but I get: A 'MultiBinding' cannot be used within a 'InlineCollection' collection. A 'MultiBinding' can only be set on a DependencyProperty of a DependencyObject.

If that is not possible, what approach would you suggest to be able to pass the whole TextBlock to IValueConverter?

4

3 回答 3

5

正如其他人指出的那样,这Inlines不是Dependency Property您收到该错误的原因。当我过去遇到类似情况时,我发现Attached Properties/Behaviors是一个很好的解决方案。我将假设它FName是 type 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);
    }
}

然后,您可以通过以下方式使用它(myxml 命名空间是否指向包含 的命名空间AttachedProperty):

<TextBlock my:InlinesBehaviors.BoldInlines="{Binding FName}" />

上面的绑定可能是多重绑定,您可以使用转换器或其他任何东西。Attached Behaviors非常强大,这似乎是使用它们的好地方。

另外,如果你有兴趣,这里有一篇关于Attached Behaviors.

于 2013-05-24T15:10:21.573 回答
2

我在寻找“不能在 'InlineCollection' 集合中使用 'MultiBinding' ”的相同错误的解决方案时遇到了这个问题。我的问题不在于InLines属性,而是在<TextBlock.Text>MultiBinding我的TextBlock. 只是检查您是否也收到此错误。

于 2019-01-15T17:16:00.353 回答
0

不,Inlines不是DependencyProperty- 这基本上就是错误消息所说的。

请参阅此处了解可能的解决方案

于 2013-05-24T14:57:30.220 回答