0

背景:

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

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

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

要求:

我不能有一个 12 像素。每个 CP 之间的间隙(由透明边框引起),所以我设置了 Border Margin="-6,-6,-6,-6"。这将边框置于 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 中(未以编程方式添加)。

有任何想法吗?

4

1 回答 1

0

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

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

于 2013-03-20T13:21:25.637 回答