我有一个带有自定义DataTemplate的ListBox,如下所示:
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Value}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我想根据页面上另一个控件的值来自定义TextBlock内容,该控件用于过滤ListBox中的项目。因此,如果过滤器控件中包含文本“Hello”,则列表项的文本为“Hello World!”。将显示为 Hello 世界! (用“Hello”加粗)。
我不确定在哪种类型的自定义格式中挂钩。我想过使用转换器,但它们只支持单个参数,而且多值转换器在Silverlight 4中仍然是禁止的。我想到了一个可以遍历项目的事件,但似乎没有一个存在于ListBox或者物品等级。我看到了this option,但我不得不怀疑这个问题是否没有更简单的解决方案。
更新:由于我需要使用多个RUN块,因为匹配可能发生在字符串中的多个位置,这甚至会变得更加复杂。例如。 Hello world Hello会有两场比赛。
答案 0 :(得分:1)
我认为你可以通过转换器实现这一目标。您只需传入ConverterParameter中的过滤器文本框的值。您的绑定看起来像这样:
<TextBlock Text="{Binding Value, Converter={StaticResource YourConverterName}, ConverterParameter={ElementName=FilterTextBox, Path=Text}}" />
转换方法以供参考:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
此时,在Convert方法中,您将通过value参数获取TextBlock的文本,并通过“parameter”参数获取过滤器TextBox的文本。