动态定制ListBox中TextBlock Text的文本

时间:2011-04-04 18:21:24

标签: c# silverlight-4.0 listbox

我有一个带有自定义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会有两场比赛。

1 个答案:

答案 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的文本。