代码之家  ›  专栏  ›  技术社区  ›  dkalkwarf

ZIndex不适用于ContentControl?

  •  0
  • dkalkwarf  · 技术社区  · 10 年前

    我试图通过使用包含形状控件(例如矩形、椭圆)的画布覆盖控件来创建地板布局。布局的一部分是包含三个圆的矩形。由于圆的大小/颜色相同,我为它们创建了一个资源。我试图将圆放在矩形的顶部。我的问题是只有最后一个圆圈出现。我试过使用Panel.Zindex,但不起作用。

    经过一些实验,我发现问题似乎是ZIndex不能与ContentControl一起工作。如果我用椭圆替换ContentControl,那么它工作正常。我尝试过其他方法,但问题似乎是ContentControl不遵守ZIndex。我尝试过在画布周围使用边框。我尝试过不使用矩形并填充画布背景。

    下面是我的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 回复  |  直到 10 年前
        1
  •  0
  •   Clemens    10 年前

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

    通过设置 x:Shared 属性设置为false:

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