Установите управление на вершину самого silverlight

[Положение]

У меня есть пользовательский элемент управления, который я добавляю на панель стека и после этого могу свободно перемещаться с помощью перетаскивания.

public partial class CustomItem: UserControl
{
    private bool IsDragging { get; set; }
    private Point clickPosition;
    public CustomItem()
    {
        InitializeComponent();
        this.DataContext = this;
        this.MouseLeftButtonDown += (s, ea) =>
        {

            clickPosition = ea.GetPosition(this.LayoutRoot);
            this.CaptureMouse();
            IsDragging = true;
        };
        this.MouseMove += (s, ea) =>
        {
            if (IsDragging)
            {                    
                this.transFormThisShit.X = ea.GetPosition(this).X - clickPosition.X;
                this.transFormThisShit.Y = ea.GetPosition(this).Y - clickPosition.Y;
            }
        };
        this.MouseLeftButtonUp += (s, ea) =>
        {
            this.ReleaseMouseCapture();
            IsDragging = false;
        };                      
    }

[Проблема]

После того, как я добавляю 3 элемента и перетаскиваю первый элемент поверх второго или третьего, он переходит за ним.

Когда я перетаскиваю второй элемент поверх первого, он идет впереди, но когда я перетаскиваю его над третьим, он идет позади него.

Как сделать так, чтобы перетаскивание элемента управления всегда было сверху визуального дерева?

2 ответа

Решение

Вы можете установить значение ZIndex перетаскиваемого элемента выше, чем другие. Чем выше число, тем "ближе" элемент к экрану, поэтому наименьшее число будет внизу.

Используйте следующий код, чтобы установить его Canvas.ZIndex свойство к чему-то больше 0, когда вы начинаете перетаскивать ваш элемент:

Canvas.SetZIndex(element,99);

и очистите его, когда закончите перетаскивание:

element.ClearValue(Canvas.ZIndex);

Это должно сделать это.

Другие вопросы по тегам