动态地自定义TextBlock文本的文本

本文关键字:文本 TextBlock 自定义 动态 | 更新日期: 2023-09-27 17:48:59

我有一个ListBox和一个自定义的DataTemplate如下:

<ListBox>
     <ListBox.ItemTemplate>
          <DataTemplate>
               <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Value}" />
               </StackPanel>
          </DataTemplate>
     </ListBox.ItemTemplate>
</ListBox>

我想根据页面上另一个控件的值来定制TextBlock内容,该控件用于过滤ListBox中的项。因此,如果过滤器控件中有文本"Hello",那么文本为"Hello World!"的列表项将显示为Hello World!(加粗"Hello")

我不确定在哪里挂钩这种类型的自定义格式。我想过使用转换器,但它们只支持单个参数,多值转换器在Silverlight 4中仍然是不允许的。我考虑了一个事件,在这个事件中我可以遍历项目,但似乎没有一个项目出现在ListBox或Item级别。我看到了这个选项,但我想知道是否有更简单的解决方案。

UPDATE:由于匹配可以发生在字符串中的多个位置,因此我需要使用多个RUN块,这甚至使情况变得更加复杂。例如Hello world Hello有两个匹配

动态地自定义TextBlock文本的文本

我认为您可以使用转换器完成此操作。您只需在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的文本。