0

我有一个列表,其中包含一些控件,包括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>

它将正确覆盖 SAME 列表项中的项目,但仍会与后面的列表项中的内容混合呈现。

(我怀疑这是一个相当明显的布局问题,但我一直没能找到。)

4

1 回答 1

0

您可以尝试编写一个转换器,根据列表中项目的索引在数据模板中设置 ZIndex。有趣的是,确保在添加/删除项目时一切都正确更新。

您是否需要扩展器独立于布局?

于 2009-11-25T13:03:10.877 回答