没有ItemContainer的所选项的ListBox前景颜色问题

时间:2009-12-09 16:41:00

标签: wpf xaml .net-3.5 listboxitem

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}”,但我想知道为什么会发生这种情况。

1 个答案:

答案 0 :(得分:2)

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

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

当您显式指定ListBoxItem时,将其添加到逻辑树中,并从中继承Foreground。在StackPanel的情况下,逻辑树是不同的,Foreground是从不同的父级继承的...我确定你之前已经读过这个,但只是为了日志。迈克希尔伯格有一篇很棒的文章:Of logical and visual trees in WPF。他非常清楚地解释了这种行为。

干杯