我创建了一个可移动的UserControl
<UserControl x:Class="Restaurant.Views.Managerer.TablePanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Restaurant.Helpers.Converter"
mc:Ignorable="d"
x:Name="root"
MouseLeftButtonDown="root_MouseLeftButtonDown"
MouseLeftButtonUp="root_MouseLeftButtonUp"
MouseMove="root_MouseMove"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
....
Point anchorPoint;
Point currentPoint;
bool isInDrag = false;
private void root_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var element = sender as FrameworkElement;
anchorPoint = e.GetPosition(null);
element.CaptureMouse();
isInDrag = true;
e.Handled = true;
}
private void root_MouseMove(object sender, MouseEventArgs e)
{
if (isInDrag)
{
var element = sender as FrameworkElement;
currentPoint = e.GetPosition(null);
var transform = new TranslateTransform
{
X = (currentPoint.X - anchorPoint.X),
Y = (currentPoint.Y - anchorPoint.Y)
};
this.RenderTransform = transform;
anchorPoint = currentPoint;
}
}
private void root_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (isInDrag)
{
var element = sender as FrameworkElement;
element.ReleaseMouseCapture();
isInDrag = false;
e.Handled = true;
}
}
如果我从
更改代码X = (currentPoint.X - anchorPoint.X),
Y = (currentPoint.Y - anchorPoint.Y)
到
X = (currentPoint.X),
Y = (currentPoint.Y)
我可以移动UserControl
,但鼠标与UserControl
不匹配
答案 0 :(得分:14)
早上好。我睡了,可以想)))
private TranslateTransform transform = new TranslateTransform();
private void root_MouseMove(object sender, MouseEventArgs e)
{
if (isInDrag)
{
var element = sender as FrameworkElement;
currentPoint = e.GetPosition(null);
transform.X += currentPoint.X - anchorPoint.X;
transform.Y += (currentPoint.Y - anchorPoint.Y);
this.RenderTransform = transform;
anchorPoint = currentPoint;
}
}
答案 1 :(得分:6)
我真的不确定你在问题中想要完成的是什么,但拇指更容易拖动动作。您可以看到解释和示例代码(位于底部)here。
答案 2 :(得分:-2)
根据 @Mediator 答案中的信息。我已经进行了编辑,以防止控件超出范围。
private TranslateTransform transform = new TranslateTransform();
private void root_MouseMove(object sender, MouseEventArgs e)
{
if (isInDrag)
{
var element = sender as FrameworkElement;
currentPoint = e.GetPosition(null);
transform.X += currentPoint.X - anchorPoint.X;
transform.Y += (currentPoint.Y - anchorPoint.Y);
if (currentPoint.X < Application.Current.MainWindow.RenderSize.Width && currentPoint.Y < Application.Current.MainWindow.RenderSize.Height
&& currentPoint.X > 0 && currentPoint.Y > 0 )
{
this.RenderTransform = transform;
anchorPoint = currentPoint;
}
else
{
transform = new TranslateTransform();
this.RenderTransform = transform;
}
}
}
但绑定错误是他们在VS中的输出窗口。
看起来这是WPF中的一个问题,但微软无法修复。
有关详细信息,请按:
https://connect.microsoft.com/VisualStudio/feedback/details/1423399/system-windows-data-error-4-when-using-relativesource-findancestor-inside-a-translatetransform-inside-a-style