繁体   English   中英

高亮显示文本块中的部分文本不适用于所有listboxItems

[英]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,请告诉我。 非常感谢你!

[问题图片] http://i.stack.imgur.com/HViag.png

解决此问题的一种方法是将ListBox VirtualizingStackPanel.IsVirtualizing设置为false 这将导致立即创建所有项目。 不利的一面是,如果ListBox有很多项目,则程序将使用更多的内存(因为将创建更多的项目),并且根据项目的数量,运行速度可能会变慢。

要考虑的一个更好的解决方案是为此使用多个DataTemplate -一个不带突出显示,另一个带。 您可以为ListBox设置一个DataTemplateSelector (使用ItemTemplateSelector属性)。 选择器可以根据项目是否与搜索词匹配来选择要使用的模板。

棘手的部分是使用突出显示的文本编写模板。 您可以通过在对象上具有属性来实现ListBoxItem绑定到突出显示的文本,突出显示的文本以及其余文本之前的文本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM