【问题标题】:Overlapping controls - Canvas.ZIndex not working重叠控件 - Canvas.ZIndex 不起作用
【发布时间】:2013-03-20 13:10:34
【问题描述】:

背景:

对于我的 Windows Phone 应用程序,我创建了一个名为 CharacterPresenter 的 UserControl(简称为 CP)。这是一个带有边框控件的小矩形,我可以在 PhoneAccentBrush 和透明之间切换,以便用户可以看到它何时被选中。

我创建了第二个用户控件,称为 MultiCharacterPresenter (MCP)。这包含一个水平方向的 StackPanel,用于在单行上显示多个 CP 控件。这也有一个边框控件,因此用户可以看到何时选择了整行。

请注意,任何时候只能选择一个*Presenter,并且所有BorderThickness="6"。

要求:

我不能有 12 像素。每个 CP 之间的间隙(由透明边框引起),所以我设置了 Border Margin="-6,-6,-6,-6"。这会将 Border 置于 CP UserControl 边界的矩形之外,并允许 CP 控件在 MCP 内形成一条连续的线。

So then, when a CP is selected, the Border overlaps the neighbouring CP controls.这很好,因为选定的 CP 具有用户的焦点,因此其他 CP 控件可能被部分遮挡是可以的。

问题:

问题是每个 CP 的 Border 右侧下一个 CP 的右侧。只有最右边的 CP 显示完整的边框。我希望在选择 CP 但部分隐藏时显示整个边框。

无解:

我尝试将所有边框控件的 Canvas.ZIndex 设置为 1(而所有其他内容的默认值为零),这应该将边框控件置于其他所有内容之上......但这没有用。我不知道为什么。

如果有所作为,我将根据数据将 CP 控件一一添加到代码中的 MCP。因此,也许 ZIndex 仅在所有控件同时呈现时才有效,例如如果它们已经存在于 XAML 中(未以编程方式添加)。

有什么想法吗?

【问题讨论】:

    标签: xaml windows-phone-7.1


    【解决方案1】:

    任何Panel 中包含的控件相对于彼此的布局由Panel 本身定义。在您的情况下,您使用的是StackPanel,它没有 Z 索引的概念。它按照添加到其Children 集合中的顺序排列项目。您正在使用的ZIndex 附加属性是在Canvas 上定义的,因为Canvas 面板将其用作其布局过程的一部分。

    您为什么不尝试将 BorderThickness 改为 0?

    【讨论】:

    • 好的,所以 Canvas.ZIndex 不是首发。那时没有隐式画布之类的东西。不确定零宽度边框如何解决任何问题?右边的CP还是会在上面。除非您建议允许边界将右侧的 CP 向右推(即横向移动)边界的厚度?这不是我想要的视觉效果。我没听错吗?
    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 2021-11-29
    相关资源
    最近更新 更多