gpt4 book ai didi

wpf - 将 ValueConverter 与内联一起使用

转载 作者:行者123 更新时间:2023-12-04 21:46:33 25 4
gpt4 key购买 nike

是否可以将 ValueConverter 与内联一起使用?我需要将 ListBox 中每一行的某些部分加粗。

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

它编译但我得到:不能在“InlineCollection”集合中使用“MultiBinding”。只能在 DependencyObject 的 DependencyProperty 上设置“MultiBinding”。

如果这不可能,您建议采用什么方法将整个 TextBlock 传递给 IValueConverter?

最佳答案

正如其他人指出的那样,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}" />

上面的绑定(bind)可以是多重绑定(bind),你可以使用转换器,或者其他什么。 附加行为 非常强大,这似乎是一个使用它们的好地方。

另外,如果您有兴趣,这里是 article关于附加行为

关于wpf - 将 ValueConverter 与内联一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16737811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com