ZIndex不适用于ContentControl?

时间:2015-01-23 16:55:16

标签: wpf contentcontrol

我试图通过使用包含形状控件的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>

1 个答案:

答案 0 :(得分:0)

这不是ZIndex。问题是Ellipse资源只有一个实例,它被重复用作多个ContentControls的内容。但是,元素只能添加一次到可视树中。

您可以通过将x:Shared属性设置为false来告诉WPF它应该创建多个资源实例,从而解决此限制:

<Ellipse x:Key="MyCircle" ... x:Shared="False"/>