C# 拖动时更改ZIndex
我在画布中拖动不同的C# 拖动时更改ZIndex,c#,wpf,C#,Wpf,我在画布中拖动不同的StackPanels,但当我在同一画布中拖动另一个StackPanel时,它会抓住该画布,而不是当前正在拖动的。我正试图用Zindex解决这个问题。这是正确的方法吗? 到目前为止,我的代码是: private void UIElement_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { StackPanel sp = (StackPanel)sender; Panel.SetZIn
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在button down和button up上设置正确,但元素似乎并不在意。在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索引仍然错误,我仍然需要对此进行修复。您能展示移动这些面板背后的全部逻辑吗?@Mateusz-Sure-thing(不确定如何格式化)。私有void UIElement_OnMouseMove(对象发送方,MouseEventArgs e){if(e.LeftButton==MouseButtonState.Pressed){StackPanel sp=(StackPanel)发送方;SymbolModel sm=sp.DataContext作为SymbolModel;Point pos=e.GetPosition(SymbolViewControl);如果(pos.X>10&&pos.Y>10){sm.CanvasTop=pos.Y-10;sm.canvasleet=pos.X-10;}}}}}则canvasleet和Top是绑定属性