ZOrder Expander с Canvas внутри списка

У меня есть список, который содержит некоторые элементы управления, в том числе Expander, В экспандере есть еще один список, который я хочу наложить на внешний список. Вот простое воспроизведение:

<Page.Resources>
    <x:Array x:Key="array1" Type="sys:String">
        <sys:String>item 1</sys:String>
        <sys:String>item 2</sys:String>
        <sys:String>item 3</sys:String>
    </x:Array>
    <DataTemplate x:Key="buttonTemplate">
        <Button Content="{Binding}"/>
    </DataTemplate>
    <DataTemplate x:Key="expanderItem">
        <StackPanel>
            <Expander Header="Options">
                <Canvas>
                    <StackPanel Panel.ZIndex="999" Background="Red">
                        <Label>A1</Label>
                        <Label>A2</Label>
                        <Label>A3</Label>
                        <Label>A4</Label>
                    </StackPanel>
                </Canvas>
            </Expander>
            <Label BorderBrush="Black" BorderThickness="2" Content="{Binding}"/>
        </StackPanel>
    </DataTemplate>
</Page.Resources>
<Grid>
    <ListBox ItemsSource="{StaticResource array1}" ItemTemplate="{StaticResource expanderItem}"/>
</Grid>

Когда Expander открывается, внутренние метки отображаются на том же уровне, что и метка в том же DataTemplate и содержание более поздних пунктов в списке. Я пытался переместить Panel.ZIndex до панели без изменений.

Если я добавлю следующий стиль:

<Style TargetType="{x:Type Expander}">
    <Style.Triggers>
        <Trigger Property="IsExpanded" Value="True">
            <Setter Property="Panel.ZIndex" Value="999"/>
        </Trigger>
    </Style.Triggers>
</Style>

Он будет правильно перекрывать элементы в одном и том же элементе списка, но все равно будет отображаться с содержимым из более поздних элементов списка.

(Я подозреваю, что это довольно очевидная проблема макета, но я не смог ее найти.)

1 ответ

Решение

Вы можете попробовать написать конвертер, который устанавливает ZIndex в табличке данных на основе индекса элемента в списке. Интересно, что все будет правильно обновляться при добавлении / удалении элементов.

Вам нужен расширитель, чтобы быть независимым от макета?

Другие вопросы по тегам