2011-04-04 67 views
0

我有一个自定义的DataTemplate一个列表框,如下所示:自定义文本动态

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

我愿在此基础上使用了页面上的其他控件的值以自定义TextBlock的内容过滤列表框中的项目。因此,如果过滤器控件中包含文本“Hello”,则会显示一个包含“Hello World!”文本的列表项。会出现为你好世界! (用“你好”加粗)。

我不确定在这种类型的自定义格式中挂钩。我想过使用Converter,但他们只支持单个参数,而多值转换器在Silverlight 4中仍然是不可行的。我想到了一个可以迭代项目的事件,但似乎没有任何项目出现在ListBox或项目级别。我看到this option,但我不得不怀疑是否没有更简单的解决方案来解决这个问题。

更新:由于匹配可能发生在字符串中的多个位置,因此我需要使用多个RUN块,这更加复杂。例如。你好世界你好会有两场比赛。

回答

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) 

在这一点上,在你的转换方法,你就必须通过值参数TextBlock的文本,过滤器TextBox的文本通过“参数”参数。

+0

那么,我会简单地然后能够注入到TextBlock多个运行,如果是的话如何? – 2011-04-04 20:20:39

+0

对于多次运行,我认为你将需要绑定到Inlines属性。 http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.inlines(v=vs.95).aspx – BrandonZeider 2011-04-04 21:07:11