重叠控件-Canvas.ZIndex不工作



背景:

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

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

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

要求:

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

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

问题:

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

非解决方案:

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

如果有什么不同的话,我会根据数据,在代码中一个接一个地将CP控制添加到MCP中。因此,也许ZIndex只有在同时呈现所有控件时才起作用,例如,如果它们已经存在于XAML中(不是通过编程添加的(。

有什么想法吗?

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

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

最新更新