C# 将文本框放在画布上方,然后放在下方

C# 将文本框放在画布上方,然后放在下方,c#,wpf,xaml,canvas,C#,Wpf,Xaml,Canvas,我有三张画布,每一张都有文本框。 第一个画布包含一个比画布大的文本框,应该位于下面画布的顶部。 我尝试使用z-index,但画布似乎总是位于文本框的顶部。您可以明确创建项目容器,即ListBoxItems ListBoxItems将是ListBox的ItemsPanel的直接子元素,因此有一个公共父元素,这是使ZIndex属性工作所必需的: <ListBox> <ListBoxItem Panel.ZIndex="1"> <Canvas ..

我有三张画布,每一张都有文本框。 第一个画布包含一个比画布大的文本框,应该位于下面画布的顶部。
我尝试使用z-index,但画布似乎总是位于文本框的顶部。

您可以明确创建项目容器,即ListBoxItems

ListBoxItems将是ListBox的ItemsPanel的直接子元素,因此有一个公共父元素,这是使ZIndex属性工作所必需的:

<ListBox>
    <ListBoxItem Panel.ZIndex="1">
        <Canvas ...>
            ...
        </Canvas>
    </ListBoxItem>
    <ListBoxItem>
        <Canvas ...>
            ...
        </Canvas>
    </ListBoxItem>
    <ListBoxItem>
        <Canvas ...>
            ...
        </Canvas>
    </ListBoxItem>
</ListBox>

...
...
...

您可以明确地创建项目容器,即ListBoxItems

ListBoxItems将是ListBox的ItemsPanel的直接子元素,因此有一个公共父元素,这是使ZIndex属性工作所必需的:

<ListBox>
    <ListBoxItem Panel.ZIndex="1">
        <Canvas ...>
            ...
        </Canvas>
    </ListBoxItem>
    <ListBoxItem>
        <Canvas ...>
            ...
        </Canvas>
    </ListBoxItem>
    <ListBoxItem>
        <Canvas ...>
            ...
        </Canvas>
    </ListBoxItem>
</ListBox>

...
...
...

我还将应用一些样式,使您的代码更短,更易于维护。在使用克莱门斯溶液之前,应该看起来有点像:

<ListBox>
    <ListBox.Resources>
        <Style TargetType="{x:Type Canvas}">
            <Setter Property="Width" Value="500" />
            <Setter Property="Background" Value="Blue" />
            <Setter Property="Height" Value="40" />
        </Style>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Width" Value="30" />
            <Setter Property="Canvas.Top" Value="10" />
            <Setter Property="Height" Value="20" />
        </Style>
    </ListBox.Resources>

    <Canvas Name="firstCanvas" 
            Top="80" 
            Left="100"
            ZIndex="3">

        <TextBox Name="BigText" 
                    Background="White"
                    Canvas.ZIndex="6" 
                    Canvas.Left="50"/>

        <TextBox Canvas.Left="100"/>
        <TextBox Canvas.Left="150"/>
        <TextBox Canvas.Left="200"/>
    </Canvas>

    <Canvas Top="80" 
            Left="100" 
            ZIndex="1">

        <TextBox Canvas.Left="100"/>
        <TextBox Canvas.Left="150"/>
        <TextBox Canvas.Left="200"/>
    </Canvas>

    <Canvas Top="80" 
            Left="100"
            ZIndex="2">

        <TextBox Canvas.Left="100"/>
        <TextBox Canvas.Left="150"/>
        <TextBox Canvas.Left="200"/>
    </Canvas>
</ListBox>

我还将应用一些样式,使您的代码更短,更易于维护。在使用克莱门斯溶液之前,应该看起来有点像:

<ListBox>
    <ListBox.Resources>
        <Style TargetType="{x:Type Canvas}">
            <Setter Property="Width" Value="500" />
            <Setter Property="Background" Value="Blue" />
            <Setter Property="Height" Value="40" />
        </Style>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Width" Value="30" />
            <Setter Property="Canvas.Top" Value="10" />
            <Setter Property="Height" Value="20" />
        </Style>
    </ListBox.Resources>

    <Canvas Name="firstCanvas" 
            Top="80" 
            Left="100"
            ZIndex="3">

        <TextBox Name="BigText" 
                    Background="White"
                    Canvas.ZIndex="6" 
                    Canvas.Left="50"/>

        <TextBox Canvas.Left="100"/>
        <TextBox Canvas.Left="150"/>
        <TextBox Canvas.Left="200"/>
    </Canvas>

    <Canvas Top="80" 
            Left="100" 
            ZIndex="1">

        <TextBox Canvas.Left="100"/>
        <TextBox Canvas.Left="150"/>
        <TextBox Canvas.Left="200"/>
    </Canvas>

    <Canvas Top="80" 
            Left="100"
            ZIndex="2">

        <TextBox Canvas.Left="100"/>
        <TextBox Canvas.Left="150"/>
        <TextBox Canvas.Left="200"/>
    </Canvas>
</ListBox>