使用列表框中的自定义项进行Zordering - Silverlight

时间:2010-09-30 20:21:47

标签: silverlight layout custom-controls z-order

我正在烹饪一个自定义按钮。 This屏幕截图会很有帮助。如图所示按钮没有问题,因为徽章悬挂在左侧。但是,如果我希望徽章悬挂在右侧,那么列表框中的下一个项目将遮盖徽章中超出其容器边界(按钮宽度)的部分。现在我无法通过zordering解决这个问题,对吗?因为这仅适用于其容器内的排序,在本例中为ListBoxItem。有什么可以在这里完成的吗?仅供参考,我希望避免一些解决办法,例如投入足够的利润以给予徽章空间。 I have another custom button其文本是可编辑的,用于获取输入文本的TextBox的扩展将远远超出基础按钮。

1 个答案:

答案 0 :(得分: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作为项目面板,它不适用于默认的VirtualizingStackPanel,这将更加复杂。