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

Wpf 没有ItemContainer的选定项目的列表框前景颜色问题,wpf,xaml,.net-3.5,listboxitem,Wpf,Xaml,.net 3.5,Listboxitem,下面的代码,行为有点奇怪 <ListBox SelectionMode="Multiple"> <StackPanel> <TextBlock>Selection is Black</TextBlock> </StackPanel> <ListBoxItem> <StackPanel>

下面的代码,行为有点奇怪

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

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

当显式指定ListBoxItem时,将其添加到逻辑树中,前台将从中继承。在StackPanel的情况下,逻辑树是不同的,前台是从不同的父级继承的。。。我相信你以前读过这篇文章,但只是为了日志。迈克·希尔伯格的文章真的很棒。他非常清楚地解释了这种行为


干杯

谢谢你的回答,你能告诉我在哪里以及如何看到这棵逻辑树吗??你用了什么工具找到这个?但我怀疑这种情况,因为“样式”和模板应该正确地适用于可视树。感谢您的回答,我详细阅读了DPs实际上首先遵循逻辑父级,然后才是可视的。。这当然是itemscontrol的一个问题,我向microsoft报告过,但他们只会说“通过设计解决”,但这只是意味着我必须重写大量库代码才能使其正常工作。