我试图通过使用包含形状控件的Canvas(例如Rectangle,Ellipse)覆盖控件来创建地板布局。布局的一部分是包含三个圆的矩形。由于圆圈的大小/颜色相同,我为它们创建了一个资源。我试图将圆圈放在矩形的顶部。我的问题是只出现最后一个圆圈。我尝试使用Panel.Zindex,但它不起作用。
经过一些实验,我发现问题似乎是ZIndex不能与ContentControl一起使用。如果我用Ellipse替换ContentControl,那么它工作正常。我尝试过其他方法,但问题似乎是ContentControl不服从ZIndex。我试过在Canvas周围使用边框。我尝试过不使用矩形并填充Canvas背景。
下面是我的XAML,其中包含哪些有效,哪些无效。
<Window.Resources>
<ResourceDictionary>
<Ellipse x:Key="MyCircle" Fill="Black" Width="1.5" Height="1.5"/>
<!--uses resource, but only shows last ellipse-->
<Canvas x:Key="LastEllipseOnly">
<Rectangle Fill="DarkGray" Width="6" Height="2.5" />
<ContentControl Content="{StaticResource MyCircle}" Canvas.Left="0.5" Canvas.Top="0.5"/>
<ContentControl Content="{StaticResource MyCircle}" Canvas.Left="2.25" Canvas.Top="0.5"/>
<ContentControl Content="{StaticResource MyCircle}" Canvas.Left="4.0" Canvas.Top="0.5"/>
</Canvas>
<!--this works, but it does not use the resource-->
<Canvas x:Key="Working" Width="6" Height="2.5">
<Rectangle Fill="DarkGray" Width="6" Height="2.5"/>
<Ellipse Fill="Black" Width="1.5" Height="1.5" Canvas.Left="0.5" Canvas.Top="0.5"/>
<Ellipse Fill="Black" Width="1.5" Height="1.5" Canvas.Left="2.25" Canvas.Top="0.5"/>
<Ellipse Fill="Black" Width="1.5" Height="1.5" Canvas.Left="4.0" Canvas.Top="0.5"/>
</Canvas>
</ResourceDictionary>
</Window.Resources>
<Viewbox>
<Canvas Height="50" Width="50">
<ContentControl Content="{StaticResource LastEllipseOnly}" Canvas.Left="10" Canvas.Top="10"/>
<ContentControl Content="{StaticResource Working}" Canvas.Left="40" Canvas.Top="40"/>
</Canvas>
</Viewbox>
答案 0 :(得分:0)
这不是ZIndex。问题是Ellipse资源只有一个实例,它被重复用作多个ContentControls的内容。但是,元素只能添加一次到可视树中。
您可以通过将x:Shared
属性设置为false来告诉WPF它应该创建多个资源实例,从而解决此限制:
<Ellipse x:Key="MyCircle" ... x:Shared="False"/>