2011-04-04 81 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