0

替代文字 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>

请注意,第一个选择保持黑色,这是因为 Item 不是它自己的 ItemContainer,但是在第二种情况下,Item 是它自己的 ItemContainer,因此样式可以正常工作。大多数时候,我们通过模板填充数据,并且每次我们的 Item 不是它自己的 ItemContainer 时,这就是 TextBlock 在前景色方面表现得很奇怪的原因。

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

4

1 回答 1

2

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

alt 逻辑树 http://img13.imageshack.us/img13/9082/logicaltree.jpg

当您明确指定 ListBoxItem 时,您将其添加到逻辑树中,并且 Foreground 是从它继承的。在 StackPanel 的情况下,逻辑树是不同的,并且 Foreground 是从不同的父级继承的......我相信你以前读过这个,但只是为了日志。Mike Hillberg 有一篇非常棒的文章:关于 WPF 中的逻辑树和可视树。他非常清楚地解释了这种行为。

干杯

于 2009-12-09T17:38:19.933 回答