Изменение ZIndex при перетаскивании - PullRequest
0 голосов
/ 29 августа 2018

Я перетаскиваю различные StackPanel s внутри холста, но когда я перетаскиваю другой StackPanel внутри того же холста, он перекрывает его, и тот захватывает тот, который я перетаскиваю в данный момент. Я пытаюсь решить эту проблему с Zindex. Это правильный путь? Мой код пока:

private void UIElement_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    StackPanel sp = (StackPanel)sender;
    Panel.SetZIndex(sp, 99999);
    sp.Background = Brushes.Red;
    Console.WriteLine(Panel.GetZIndex(sp));
}

private void UIElement_OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    StackPanel sp = (StackPanel)sender;
    Panel.SetZIndex(sp, -10);
    sp.Background = Brushes.Green;
    Console.WriteLine(Panel.GetZIndex(sp));
}

private void UIElement_OnMouseMove(object sender, MouseEventArgs e) 
{
    if (e.LeftButton == MouseButtonState.Pressed) 
    { 
        StackPanel sp = (StackPanel) sender; 
        SymbolModel sm = sp.DataContext as SymbolModel; 
        Point pos = e.GetPosition(SymbolViewControl); 
        if (pos.X > 10 && pos.Y > 10) 
        { 
            sm.CanvasTop = pos.Y-10; 
            sm.CanvasLeft = pos.X-10; 
        } 
    } 
}

Цвета и сценарий предназначены только для тестирования и, похоже, работают так, как задумано. Zindex настроен правильно при нажатии кнопки и при нажатии кнопки вверх, но элементы, кажется, не заботятся.

Спасибо за ваше время!

1 Ответ

0 голосов
/ 29 августа 2018

Использование CaptureMouse и ReleaseMouseCapture внутри методов mousedown и mouseup, по-видимому, исправило основную проблему.

private void UIElement_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        StackPanel sp = (StackPanel)sender;
        Panel.SetZIndex(sp, 99999);
        sp.CaptureMouse(); //This
    }

    private void UIElement_OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        StackPanel sp = (StackPanel)sender;
        Panel.SetZIndex(sp, -10);
        sp.ReleaseMouseCapture(); //And this
    } 

Это новое слово, которое я начал захватывать, независимо от того, что будет до релиза. Z-индекс все еще не прав, и мне все еще нужно исправить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...