我在画布中拖动不同的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已正确设置在按下按钮和按下按钮上,但是元素似乎并不在意。
感谢您的时间!
答案 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索引仍然是错误的,我仍然需要对此进行修复。