0
WPFアプリでマウスでボタンを移動しようとしています。WPFマウスで移動する
構造のルートであるXAMLグリッドがあります:背後
<Grid Name="MyGrid" >
<Button Name="Samplebutton"
PreviewMouseDown="Samplebutton_PreviewMouseDown"
PreviewMouseUp="Samplebutton_PreviewMouseUp"
PreviewMouseMove="Samplebutton_PreviewMouseMove"
Content="Moving" Width="100" Height="35"/>
</Grid>
とコード:
private bool _isMoving;
private void Samplebutton_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
_isMoving = true;
}
private void Samplebutton_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
_isMoving = false;
}
private void Samplebutton_PreviewMouseMove(object sender, MouseEventArgs e)
{
if (!_isMoving) return;
TranslateTransform transform = new TranslateTransform();
transform.X = Mouse.GetPosition(MyGrid).X;
transform.Y = Mouse.GetPosition(MyGrid).Y;
this.Samplebutton.RenderTransform = transform;
}
ボタンへの最初のクリックが遠くに彼を移動し、その後、私はボタンを移動することができますが、ためには、はじめてボタンを離したときです。私は何が欠けているのですか?あなたが最初のインスタンスでのマウスの位置を保存し、常に以下
private double _startX; // Or whatever number type Mouse.GetPosition(MyGrid).X returns
private double _startY; // Or whatever number type Mouse.GetPosition(MyGrid).Y returns
private void Samplebutton_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
_startX = Mouse.GetPosition(MyGrid).X;
_startY = Mouse.GetPosition(MyGrid).Y;
_isMoving = true;
}
private void Samplebutton_PreviewMouseMove(object sender, MouseEventArgs e)
{
if (!_isMoving) return;
TranslateTransform transform = new TranslateTransform();
transform.X = Mouse.GetPosition(MyGrid).X - _startX;
transform.Y = Mouse.GetPosition(MyGrid).Y - _startY;
this.Samplebutton.RenderTransform = transform;
}
TranslateTransformは、ボタンの元の位置からの相対移動です。マウスの位置はグリッド要素の中で絶対的です。数学をしてボタンの元の位置を引いて、絶対値を相対距離に変換しなければならないと思います。 – Auskennfuchs