WPF Canvas 上没有 Canvas.ZIndex 或 SetZIndex() 属性

Joe*_*Joe 3 wpf canvas

我正在尝试更改 WPF 画布上组件的 Z 顺序,但它似乎并不作为 XAML 属性或方法存在于后面的代码中。

这是我的 XAML:

<UserControl x:Class="FrontendUI.Controls.RadialTracker"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:FrontendUI.Controls"
         mc:Ignorable="d" 
         d:DesignHeight="500" d:DesignWidth="500">
<Grid >
    <Canvas x:Name="TrackerCanvas">
    </Canvas>
</Grid>
Run Code Online (Sandbox Code Playgroud)

起初我试图以编程方式执行此操作:

在此处输入图片说明

然后我尝试使用 XAML 添加一个路径并设置 Canvas.ZIndex,它也不存在。虽然有 Panel.ZIndex,但我假设这是指 UI 中更高的内容(网格或用户控件本身?)

在此处输入图片说明

不知道如何继续。有谁知道为什么会这样?

Siv*_*ian 7

Canvas 继承自 Panel。Panel.SetZIndex() 是一个静态方法,而 Panel.ZIndex 是一个附加属性,这就是您在 xaml 中看不到它的原因。

在 xaml 中为子组件设置 ZIndex。

<Canvas >
        <Button Content="Button" Panel.ZIndex="1" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)

在后面的代码中为子组件设置 Zindex。

Canvas.SetZIndex(control, index);
Run Code Online (Sandbox Code Playgroud)

你说“虽然有 Panel.ZIndex,但我假设这是指 UI 中更高的部分(网格,或用户控件本身?)”

你的假设是错误的。要实现您的要求,您需要设置 Panel.ZIndex

你问:但他们都使用Canvas.ZIndex,有谁知道为什么会这样?

因为 ZIndex 是附加属性(而不是常规依赖属性)。