c# - 拖动时如何将控件保留在其父控件中?
问题描述
所以我有一个名为UI_TileInformation的控件,它需要保存在其父容器(画布)内,同时允许用户自由拖动它。 该解决方案有助于使其正常运行,现在可以很好地拖动。但是,它可以被拖到其容器的边界之外。 这个解决方案没有帮助,因为我看不到 _transform 变量的来源。
该控件具有以下默认变量:
protected bool isDragging;
private Point clickPosition;
以及这些事件处理程序:
this.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(Control_MouseLeftButtonDown);
this.PreviewMouseLeftButtonUp += new MouseButtonEventHandler(Control_MouseLeftButtonUp);
this.PreviewMouseMove += new MouseEventHandler(Control_MouseMove);
我对 c# 和 WPF 相当陌生,但我发现这些事件处理程序只能在预览时使用(PreviewMouseMove 而不是 MouseMove)
至于让它拖动的代码,和上面第一个链接类似:
private void Control_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
isDragging = true;
var draggableControl = sender as UI_TileInformation;
clickPosition = e.GetPosition(this);
draggableControl.CaptureMouse();
}
private void Control_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
isDragging = false;
var draggableControl = sender as UI_TileInformation;
draggableControl.ReleaseMouseCapture();
}
private void Control_MouseMove(object sender, MouseEventArgs e)
{
var draggableControl = sender as UI_TileInformation;
if (isDragging && draggableControl != null)
{
Point positionInUIElement = e.GetPosition(this);
var transform = draggableControl.RenderTransform as TranslateTransform;
if (transform == null)
{
transform = new TranslateTransform();
draggableControl.RenderTransform = transform;
}
transform.X = positionInCanvas.X - clickPosition.X;
transform.Y = positionInCanvas.Y - clickPosition.Y;
}
}
我怎样才能让我的控制留在画布内?
解决方案
推荐阅读
- javascript - 如何使用 progressBar.js 在特定路径上放置渐变?
- webpack - SyntaxError:预期的表达式,得到'<'错误 - vue
- python - Mongodb sql类似于带有case语句的更新语句
- ng-zorro-antd - 为什么运行`ng build --prod`时出现错误
- c# - 如何使用 PocketSphinx 库在 Xamarin Android (Visual Studio) 中实现 Speech to Text 系统?
- node.js - 如何使用 Mongoose 查找子文档?
- android - JobIntentService 定期运行?
- python - 类中的方法如何访问类常量变量?
- c# - TCP 套接字在 Xamarin.Forms 中未按预期工作
- javascript - Vue - 如何将父引用作为道具传递给孩子?