重叠控件 - Canvas.ZIndex不起作用

时间:2013-03-20 13:10:34

标签: xaml windows-phone-7.1

背景:

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

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

请注意,任何时候只能选择一个* Presenter,并且所有BorderThickness都是“6”。

要求:

我不能拥有12px。每个CP之间的间隙(由透明边框引起)所以我设置边界边距=“ - 6,-6,-6,-6”。这会将边框置于限制CP UserControl的矩形之外,并允许CP控件在MCP内部形成一条连续线。

然后,当选择CP时,边框与相邻的CP控件重叠。这很好,因为所选的CP具有用户的焦点,因此可以部分遮挡其他CP控件。

问题:

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

非溶液:

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

如果它有所不同,我会根据数据将代码中的CP控件逐个添加到MCP中。因此,ZIndex可能仅在所有控件同时呈现时才起作用,例如,如果它们已经存在于XAML中(未以编程方式添加)。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

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