[英]Highlight the text of listboxitems inside a listbox depending on the textbox :
[英]Highlight part of text in textblock not working on all listboxItems
我試圖從列表框數據模板中突出顯示文本塊中文本的一部分,該列表又通過使用文本框在列表中搜索輸入文本而綁定到自定義類的屬性。
但是問題在於,只有部分項目突出顯示了(大部分可見),但是當我最大化窗口並嘗試輸入另一個字符時,突然所有的項目都被突出顯示了,我猜這可能是問題所在碼:
ListBoxItem listboxItemFound= (ListBoxItem)this.listBox1.ItemContainerGenerator.ContainerFromItem(TItem);
由於當項目不可見但項目當前在列表框中時,此方法將返回null。
我以某種方式猜測,直到您向下滾動或最大化以查看更多項目之前,尚未創建item listboxItem實例。
XAML數據模板:
<DataTemplate>
<Grid Name="gridOfListbox" Height="25" Margin="0,2">
<DockPanel Name="dockpanelWithTxtBlock">
<TextBlock Name="textbloxk" DockPanel.Dock="Left" FontSize="15" TextAlignment="Center">
<Run Text="" /><Run Background="Yellow" Text="" /><Run Text="{Binding ProductID}" />
</TextBlock>
</DockPanel>
</Grid>
</DataTemplate>
如果需要更多代碼,請告訴我。
任何幫助將不勝感激!!
另外,如果還有其他更好的方法來查找綁定到自定義項的listboxItem,請告訴我。 非常感謝你!
解決此問題的一種方法是將ListBox
VirtualizingStackPanel.IsVirtualizing設置為false
。 這將導致立即創建所有項目。 不利的一面是,如果ListBox
有很多項目,則程序將使用更多的內存(因為將創建更多的項目),並且根據項目的數量,運行速度可能會變慢。
要考慮的一個更好的解決方案是為此使用多個DataTemplate
-一個不帶突出顯示,另一個帶。 您可以為ListBox
設置一個DataTemplateSelector (使用ItemTemplateSelector屬性)。 選擇器可以根據項目是否與搜索詞匹配來選擇要使用的模板。
棘手的部分是使用突出顯示的文本編寫模板。 您可以通過在對象上具有屬性來實現ListBoxItem
綁定到突出顯示的文本,突出顯示的文本以及其余文本之前的文本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.