Как я могу написать метод BringToFront для WPF UserControl? - PullRequest
1 голос
/ 29 июля 2010

Я занимаюсь разработкой UserControl, назовите его CoolControl, который должен действовать как окно, с несколькими специальными функциями. Пока что его можно изменить и перетащить по всему экрану. Если я добавлю несколько объектов CoolControl в окно приложения с помощью XAML, последний объявленный объект всегда будет впереди. Это хорошо, но я хочу сделать так, чтобы, если я нажму на один из моих объектов CoolControl во время выполнения, этот элемент управления окажется перед всеми остальными элементами управления.

Я пытался использовать Canvas.SetZIndex, но если я просто не могу найти достаточно умное решение, я не понимаю, как это может мне помочь. Потому что, как только я установил Z-индекс одного элемента управления на 9999, через какое-то время каждый другой элемент управления, на который я нажимаю, будет иметь то же значение 9999. И затем, снова, элемент управления, объявленный последним, оказывается впереди.

Если бы вам дали задание написать метод BringToFront () для чьего-либо UserControl, как бы вы сделали это как можно проще? Я бы предпочел лучшее решение, чем получить родительское окно, пройтись по всем элементам управления, найти максимальный Z-индекс, а затем соответственно установить Z-индекс CoolControl, если ЭТО является даже допустимым решением.

1 Ответ

3 голосов
/ 29 июля 2010

Я не знаком с методом Canvas.SetZIndex. Это выглядит как какое-то свойство или поведение.

Если вы можете предоставить логику для установки z-индекса, я наметил способ отслеживать экземпляры и управлять z-индексами, сохраняя их в том порядке, в котором они были выбраны / созданы.

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
    }
}
...