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>
请注意,第一个选择保持黑色,这是因为Item不是它自己的ItemContainer,但是在第二种情况下Item是它自己的ItemContainer,因此样式可以正常工作。大多数时候我们通过模板填充数据,每次我们的Item都不是它自己的ItemContainer,这就是为什么TextBlock在前景色方面表现得很奇怪。
重要提示:我正在寻找“为什么会发生这种情况”的答案而不是如何解决它,我知道解决方法TextElement.Foreground =“{TemplateBinding Foreground}”,但我想知道为什么会发生这种情况。
答案 0 :(得分:2)
我想,那是因为这里的逻辑树不同了:
alt logical tree http://img13.imageshack.us/img13/9082/logicaltree.jpg
当您显式指定ListBoxItem时,将其添加到逻辑树中,并从中继承Foreground。在StackPanel的情况下,逻辑树是不同的,Foreground是从不同的父级继承的...我确定你之前已经读过这个,但只是为了日志。迈克希尔伯格有一篇很棒的文章:Of logical and visual trees in WPF。他非常清楚地解释了这种行为。
干杯