背景:
对于我的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中(未以编程方式添加)。
有什么想法吗?
答案 0 :(得分:0)
任何Panel
中包含的控件相对于彼此的布局由Panel
本身定义。在您的情况下,您使用的是StackPanel
,它没有Z-index的概念。它按照将项目添加到其Children
集合的顺序排列。您使用的ZIndex
附加属性是在Canvas
上定义的,因为Canvas
面板将其用作其布局过程的一部分。
为什么不尝试将BorderThickness更改为0?