我有一个包含一些控件的列表,包括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列表项中的项目,但仍然呈现与后续列表项中的内容混合。
(我怀疑这是一个相当明显的布局问题,但我找不到它。)
答案 0 :(得分:0)
您可以尝试编写一个转换器,根据列表中项目的索引在数据窗口中设置ZIndex。有趣的是,在添加/删除项目时确保所有内容都正确更新。
您是否需要扩展器独立于布局?