我试图在wpf中使用控件移动控件 Canvas
这是XAML
<Canvas Grid.Column="1" Grid.Row="0" x:Name="DropCanvas" AllowDrop="True" DragOver="DropCanvas_DragOver"
Drop="Canvas_Drop" DragEnter="Canvas_DragEnter" Background="#12000000" >
<TextBox Canvas.Left="162" Canvas.Top="188" Height="23" Name="textBox1" Width="120"
PreviewMouseMove="textBox1_PreviewMouseMove"
PreviewMouseLeftButtonDown="textBox1_PreviewMouseLeftButtonDown"
PreviewMouseUp="textBox1_PreviewMouseUp" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)
这就是守则
Point p = new Point();
private void textBox1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Control control = sender as Control;
control.CaptureMouse();
p = e.GetPosition(control);
}
private void textBox1_PreviewMouseMove(object sender, MouseEventArgs e)
{
Control control = sender as Control;
Point x = e.GetPosition(control);
if (e.LeftButton == MouseButtonState.Pressed)
{
Canvas.SetLeft(control, Canvas.GetLeft(control) + (x.X - p.X));
Canvas.SetTop(control, Canvas.GetTop(control) + (x.Y - p.Y));
}
p = x;
}
private void textBox1_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
Control control = sender as Control;
control.ReleaseMouseCapture();
activated = false;
}
Run Code Online (Sandbox Code Playgroud)
代码正在运行,但当它移动时,控件会抖动.
什么是问题
当你打电话时,GetPosition你应该DropCanvas用作参数而不是控件.你看到振动,因为TextBox一直在移动,你需要修复一些东西.
或者,您可以使用MouseDragElementBehaviorExpression Blend SDK中的可用对象移动容器中的对象.
此外,这个项目对您有用:http://www.codeproject.com/Articles/24681/WPF-Diagram-Designer-Part-4
| 归档时间: |
|
| 查看次数: |
6766 次 |
| 最近记录: |