c# - 拖动时更改 ZIndex
问题描述
我在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 在按钮向下和按钮向上时设置正确,但元素似乎并不在意。
解决方案
在 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-index 仍然是错误的,我仍然需要修复它。
推荐阅读
- c# - 如何使用 smartsheet API 获取报告中的单元格历史记录
- javascript - Slide next previous anchor for each photos
- mongodb - #MongoSocketException #JaversBuildException
- javascript - 中断递归函数
- ios - 无法在相机胶卷 Swift 5 中检索视频的 URL
- python - 如何以自定义 json 格式返回数据?
- amazon-s3 - 确保仅在创建目标存储桶后才执行通过 aws cli 脚本启动的 PutBucketWebsite 操作
- php - MySQL拆分逗号分隔值和GROUP BY结果
- mysql - 在 Wordpress 中查询 mysql 替换
- xml - XSL | 自闭标签的转换