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 ではないためですが、2 番目のケースでは Item が独自の ItemContainer であるため、スタイルは正しく機能します。ほとんどの場合、テンプレートを介してデータを取り込みますが、Item は独自の ItemContainer ではないため、TextBlock は前景色に関して奇妙な動作をします。

重要: 解決方法ではなく、「なぜこれが起こるのか」に対する答えを探しています。回避策 TextElement.Foreground="{TemplateBinding Foreground}" は知っていますが、なぜこれが起こっているのか知りたいです。

4

1 に答える 1

2

これは、論理ツリーがここで異なるためだと思います。

代替論理ツリーhttp://img13.imageshack.us/img13/9082/logicaltree.jpg

ListBoxItemを明示的に指定すると、それが論理ツリーに追加され、Foregroundがそこから継承されます。StackPanelの場合、論理ツリーは異なり、Foregroundは別の親から継承されます...これは前に読んだことがあると思いますが、ログのためだけです。Mike Hillbergからの本当に素晴らしい記事があります:WPFの論理的および視覚的なツリーについて。彼はこの振る舞いを非常に明確に説明しています。

乾杯

于 2009-12-09T17:38:19.933 に答える