拖动更改ZIndex

时间:2018-08-29 09:35:49

标签: c# wpf

我在画布中拖动不同的StackPanel,但是当我在同一画布中拖动另一个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 :(得分:0)

在mousedown和mouseup方法内部使用CaptureMouse和ReleaseMouseCapture似乎已经解决了主要问题。

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索引仍然是错误的,我仍然需要对此进行修复。