我正在制作一个自定义按钮。此屏幕截图会有所帮助。如图所示,按钮没有问题,因为徽章挂在左侧。但是,如果我希望徽章挂在右侧,那么列表框中的下一个项目将掩盖超出其容器边界的徽章部分(按钮的宽度)。现在我不能用 zordering 来解决这个问题,对吧?因为这只适用于其容器内的排序,在本例中为 ListBoxItem。这里有什么可以做的吗?仅供参考,我希望避免一种变通方法,例如投入足够大的利润来给徽章空间。我有另一个自定义按钮其文本是可编辑的,并且用于获取输入文本的 TextBox 的扩展将远远超出底层按钮。
问问题
217 次
1 回答
0
您需要将 ZIndex 添加到包含ListBoxItem
本身。一种方法可能适用于一小组项目,因此创建了一种新ListBox
类型。
public class ZOrderedListBox : ListBox
{
private int _ZIndex = 0;
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
base.PrepareContainerForItemOverride(element, item);
Canvas.SetZIndex((UIElement)element, _ZIndex--);
}
}
上面将ZorderedListBox
分配一个降序的 ZIndex,以便较早的项目比后面的项目具有更高的 zindex。 请注意,这种简单的解决方案仅适用StackPanel
于 Items 面板,它不适用于 default VirtualizingStackPanel
,这将需要更复杂的操作。
于 2010-10-01T08:17:35.753 回答