0

キャンバス内の長方形を変換するのに少し問題があります。私がやりたいことは、ユーザーの指の位置に応じて長方形を移動することです。ここに私のXAMLがあります:

            <Canvas Margin="100" Height="100" Width="300">
                <Rectangle Fill="Orange" Width="100" x:Name="rect" Height="100" >
                    <toolkit:GestureService.GestureListener>
                        <toolkit:GestureListener DragDelta="GestureListener_DragDelta"/>
                    </toolkit:GestureService.GestureListener>
                </Rectangle>
            </Canvas>

コードビハインドで行ったことは次のとおりです。

private void GestureListener_DragDelta(object sender, DragDeltaGestureEventArgs e)
    {
        if ((double)e.HorizontalChange != 0)
            Canvas.SetLeft(rect, e.HorizontalChange - 100);
    }

アプリケーションを実行すると、四角形を左右に動かすと振動するという非常に面白い動作をします。それで、誰がエラーがどこにあるか知っていますか?ありがとうございました。

4

1 に答える 1

0

さらに調査を行ったところ、これを行うためのより良い方法が見つかりました。このリンクを見た後、いくつかの変更を行い、XAML でこれを取得しました。

            <Canvas Margin="100" Height="100" Width="300">
                <Rectangle Fill="Orange" Width="100" x:Name="rect" Height="100" 
                           MouseLeftButtonDown="mouseDown"
                           MouseLeftButtonUp="mouseUp"
                           MouseMove="mouseMove"/>
            </Canvas>

これは背後にあるコードです:

    bool isClicked = false;
    double rectPosition;        

    private void mouseDown(object sender, MouseButtonEventArgs e)
    {
        isClicked = true;
        rectPosition = e.GetPosition(null).X;
        rect.CaptureMouse();
    }

    private void mouseUp(object sender, MouseButtonEventArgs e)
    {
        isClicked = false;

    }

    private void mouseMove(object sender, MouseEventArgs e)
    {
        double position = e.GetPosition(null).X - rectPosition;
        double newPosition = position + (double)rect.GetValue(Canvas.LeftProperty);


        rect.SetValue(Canvas.LeftProperty, newPosition);

        rectPosition = e.GetPosition(null).X;
    }
于 2013-07-18T19:13:07.963 に答える