0

Canvas ItemsPanel を含む ListBox のコンテキストでは、複数の DataTemplates 内の各コントロールの Cavas.ZIndex にアクセスする必要があります (リストには複数のオブジェクト タイプが表示されます)。を使用するのに十分ではありません

<ListBox.ItemContainerStyle>
    <Setter Property="Canvas.ZIndex" ..... />  

それぞれにいくつかのコントロールを持ついくつかのデータ テンプレートがあり、各コントロールの絶対 zindex を制御したいと考えています。これは可能ですか?

4

1 に答える 1

1

私の知る限り、これは不可能です

その理由は、ListBoxがレンダリングされると、次のようにレンダリングされるためです(他の質問で使用したのと同じコードを参照していると仮定します)。

<Canvas>
    <ListBoxItem>
        <ContentPresenter>
            <Grid>
                <TextBlock />
                <Line />
            </Grid>
        </ContentPresenter>
    </ListBoxItem>
    <ListBoxItem>
        <ContentPresenter>
            <Grid>
                <TextBlock />
                <Line />
            </Grid>
        </ContentPresenter>
    </ListBoxItem>
    <ListBoxItem>
        <ContentPresenter>
            <Grid>
                <TextBlock />
                <Line />
            </Grid>
        </ContentPresenter>
    </ListBoxItem>
    ...
</Canvas>

ご覧のとおり、各ListBoxItemはネストされたコントロールのグループとしてレンダリングされます。すべてのTextBlockがすべて同じ親を共有しているわけではないため、すべてのLineの上にすべてのTextBlockを描画することはできません。また、ZIndexは、同じ親コンテナ内にあるアイテムを注文するために使用されます。

回避策は、互いに重ねて描画された2つの別々のItemsControlを使用することです。したがって、すべての線はBottom ItemsControlに描画され、すべてのTextBlockはTopItemsControlに描画されます。

<Grid>
    <ItemsControl ItemsSource="{Binding MyData}"
                  ItemTemplate="{DynamicResource MyLineTemplate}" />

    <ItemsControl ItemsSource="{Binding MyData}"
                  ItemTemplate="{DynamicResource MyTextBlockTemplate}" />
</Grid>
于 2011-10-31T16:30:28.053 に答える