NodeVM と LinkLineVM (CompositeCollection を使用) の 2 種類のオブジェクトを表示する Canvas ItemsPanel を持つ ListBox があります。各 VM オブジェクトには DataTemplate があります。
NodeVMs DataTemplate にはTextBlock
(A)
LinkLineVMs DataTemplate にはLine
(B) とTextBlock
(C) があります。次の絶対 z オーダーを取得する方法: A (上)、C、B (下)。
<ListBox>
<ListBox.Resources>
<DataTemplate DataType="{x:Type p:NodeVM}">
<StackPanel>
<TextBlock ... />
...
</StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type p:NetworkLinkVM}">
<Grid>
<Line ... />
<TextBlock ... />
</Grid>
</DataTemplate>
</ListBox.Resources>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True" PreviewMouseUp="network_visualization_list_PreviewMouseUp" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox>
絵は千の言葉に値する、と誰かが言ったことがあります。緑色の四角形 == NodeVM、線 + 小さなボックス == NetworkLinkVM。A はリンク [-30] が他のリンクを通過するため問題ありませんが、リンク [-31] ボックスがリンク [-32] の下に隠されているため、B は問題です。