代码之家  ›  专栏  ›  技术社区  ›  Akash Kava

没有ItemContainer的选定项目的列表框前景颜色问题

  •  0
  • Akash Kava  · 技术社区  · 16 年前

    alt text http://akashkava.com/blog/wp-content/uploads/2009/12/ListBoxItem-Selection-Problem.png

    <ListBox SelectionMode="Multiple">
    
            <StackPanel>
                <TextBlock>Selection is Black</TextBlock>
            </StackPanel>
    
            <ListBoxItem>
                <StackPanel>
                    <TextBlock>Selection is White</TextBlock>
                </StackPanel>
            </ListBoxItem>
    </ListBox>
    

    请注意,第一个选择保持为黑色,这是因为该项不是其自己的ItemContainer,但在第二种情况下,该项是其自己的ItemContainer,因此样式可以正常工作。大多数情况下,我们通过模板填充数据,每次我们的项目都不是它自己的项目容器,这就是TextBlock相对于前景色的行为奇怪的原因。

    重要提示:我正在寻找“为什么会发生这种情况”的答案,而不是如何解决它,我知道变通方法TextElement.前台=“{TemplateBinding Foreground}”,但我想知道为什么会发生这种情况。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Anvaka    16 年前

    我猜,这是因为这里的逻辑树不同:

    alt logical tree http://img13.imageshack.us/img13/9082/logicaltree.jpg

    当显式指定ListBoxItem时,将其添加到逻辑树中,前台将从中继承。在StackPanel的情况下,逻辑树是不同的,前台是从不同的父级继承的。。。我相信你以前读过这篇文章,但只是为了日志。Mike Hillberg有一篇很棒的文章: Of logical and visual trees in WPF

    干杯