1

我正在开发一个 UserControl,称之为 CoolControl,它的作用有点像一个窗口,具有一些特殊功能。到目前为止,它可以在屏幕上调整大小和拖动。如果我使用 XAML 将多个 CoolControl 对象添加到我的应用程序窗口,最后一个声明的对象总是在前面。这很好,但我想这样做,如果我在运行时单击我的一个 CoolControl 对象,该控件将把自己放在所有其他控件的前面。

我试过使用Canvas.SetZIndex,但除非我无法想出一个足够聪明的解决方案,否则我看不出这对我有什么帮助。因为一旦我将一个控件的 Z-Index 设置为 9999,随着时间的推移,我单击的每个其他控件都将具有相同的值 9999。然后,最后声明的控件再次出现在前面。

如果您的任务是为某人的 UserControl 编写 BringToFront() 方法,您将如何以最简单的方式完成它?我更喜欢一个比获取父窗口更好的解决方案,循环遍历所有控件,找到最大 Z-Index,然后相应地设置 CoolControl 的 Z-Index,如果这甚至是一个有效的解决方案。

4

1 回答 1

3

我不熟悉这种Canvas.SetZIndex方法。它看起来像是某种附加属性或行为。

如果您可以提供设置 z-index 的逻辑,我已经概述了一种跟踪实例和管理 z-index 的方法,使它们保持它们被选择/创建的顺序。

public class CoolControl : UserControl
{

    public CoolControl()
    {
        InitializeComponent();
        Instances.Add(this);
    }

    static IList<CoolControl> Instances = new List<CoolControl>();

    void SelectThisInstance()
    {
        foreach(var instance in Instances)
        {
            // decrement z-index instance
        }

        // set z-index of this instance to show at top
    }
}
于 2010-07-29T01:20:36.457 回答