c# - 拖动物体时抖动
问题描述
我是 C# 新手。我一直在使用 MouseDown 和 MouseMove 在 C# (wpf) 中进行测试。尝试在画布中创建一个简单的椭圆,该椭圆可以通过鼠标的点击和移动来拖动。一切都很好,直到我运行代码,我看到当我拖动椭圆时它会抖动。我知道对某些人来说这不是问题,但对我来说却是。接下来是我使用的 xaml 中的代码。
<Canvas>
<Ellipse x:Name="circulito" Fill="#FFFDC347" Height="100" Stroke="Black" Width="100"
MouseDown="circulito_MouseDown"
MouseMove="circulito_MouseMove"/>
</Canvas>
接下来是c#中的代码。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
Point coor;
Point coorPutin;
private void circulito_MouseDown(object sender, MouseButtonEventArgs e)
{
coor.X = Canvas.GetLeft(this);
coor.Y = Canvas.GetTop(this);
}
private void circulito_MouseMove(object sender, MouseEventArgs e)
{
coorPutin = e.GetPosition(circulito);
if (Mouse.LeftButton == MouseButtonState.Pressed)
{
Canvas.SetLeft(circulito, coor.X + coorPutin.X);
Canvas.SetTop(circulito, coor.Y + coorPutin.Y);
}
}
解决方案
一切都很好,直到我运行代码,我看到当我拖动椭圆时它会抖动
这样做的原因是因为你的circulito_MouseMove
日常生活。您不需要检查按钮是否关闭,您也尝试设置画布,这不起作用,您需要设置元素(椭圆)TopProperty
和LeftProperty
. 请参阅下面的工作解决方案。
主窗口.xaml.cs
public partial class MainWindow : Window
{
private Ellipse _ellipse;
private Point? _coor;
public MainWindow() { InitializeComponent(); }
private void circulito_MouseDown(object sender, MouseButtonEventArgs e)
{
_ellipse = sender as Ellipse;
_coor = e.GetPosition(_ellipse);
}
private void circulito_MouseMove(object sender, MouseEventArgs e)
{
if (_ellipse == null)
return;
_ellipse.SetValue(Canvas.LeftProperty, e.GetPosition(this).X - _coor.Value.X);
_ellipse.SetValue(Canvas.TopProperty, e.GetPosition(this).Y - _coor.Value.Y);
}
private void circulito_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) => _ellipse = null;
}
主窗口.xaml
<Window x:Class="WpfApp12.MainWindow"
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"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d"
MouseMove="circulito_MouseMove"
>
<Canvas>
<Ellipse x:Name="circulito"
Width="100"
Height="100"
Fill="#FFFDC347"
Stroke="Black"
MouseLeftButtonDown="circulito_MouseDown"
MouseLeftButtonUp="circulito_MouseLeftButtonUp"
MouseMove="circulito_MouseMove"
/>
</Canvas>
</Window>
请注意在MainWindow.xaml
Window
元素中,您还需要处理MouseMove
事件......
MouseMove="circulito_MouseMove"
推荐阅读
- css - Bootstrap 5 导航栏和固定顶部位置
- swift - 如何为表中的 TableColumn 赋予默认值
- mysql - mysql 驱动程序未在 venv 中的 flask_sqlalchemy python3 上加载 没有名为“MySQLdb”的模块
- xpath - Xpath:根据没有特定属性的后代选择元素
- angular - 动态更改角度材质表单字段外观
- php - laravel eloquent 用 id 数组更新 hasmany
- python - CSV 文件中的列数据为 h5 格式
- database - 如果我们保持数据库加密以保护静态数据,索引不会失败
- hyperledger-fabric - 通道高度不匹配是从 Velero 备份恢复后的超级账本结构对等体
- angular - 剑道弹出锚点标签,自动定位