0

画像の上に四角形を描画し、マウスの動きに合わせて移動する必要がある、Silverlight アプリケーションを作成しています。マウスの左クリックを押したままにすると四角形を移動できますが、マウスの左クリックをクリックしたり押したりせずに移動する必要があります。

多くの例を見てきましたが、それらはすべてマウスの左クリックで移動する形状と四角形を実装していますが、これは私の要件ではありません。

いろいろ試しましたが、うまくいきませんでした。以下は、私が現在行っているコードです。どんな提案も歓迎します。

XAML

    <Canvas x:Name="draw"  Grid.Column="0" Background="Transparent" 
            Margin="0,0,0,150" Grid.RowSpan="2">

        <Rectangle x:Name="SquareBlue" Width="100" Height="100" Canvas.Top="155" Canvas.Left="268" Fill="Transparent" Stroke="Black" StrokeThickness="2" />
    </Canvas>

        <Image x:Name="myImage" Height="100"/>
        <TextBox x:Name="X" Margin="0,0,110,0"></TextBox>
        <TextBox x:Name="Y" Margin="0,0,110,0"/>
        <Image x:Name="pictureBox1" Height="100"/>

コードビハインド

    Boolean isMouseCaptured;
    Double mouseX;
    Double mouseY;
    Int32 zIndex = 0;

    private void Shape_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        Shape s = sender as Shape;            
        isMouseCaptured = false;            
        s.ReleaseMouseCapture();            
        mouseY = -1;            
        mouseX = -1;  
    }

    private void Shape_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        Shape s = sender as Shape;
        mouseY = e.GetPosition(null).Y;
        mouseX = e.GetPosition(null).X;
        isMouseCaptured = true;
        s.CaptureMouse();

        s.SetValue(Canvas.ZIndexProperty, zIndex);
        zIndex++;
    }

    private void Shape_MouseMove(object sender, MouseEventArgs e)
    {
        if (isMouseCaptured)
        {
            Shape s = sender as Shape; 
            double deltaY = e.GetPosition(null).Y - mouseY; 
            double deltaX = e.GetPosition(null).X - mouseX; 
            double newTop = deltaY + (double)s.GetValue(Canvas.TopProperty); 
            double newLeft = deltaX + (double)s.GetValue(Canvas.LeftProperty);

            s.SetValue(Canvas.TopProperty, newTop); 
            s.SetValue(Canvas.LeftProperty, newLeft);

            mouseY = e.GetPosition(null).Y; 
            mouseX = e.GetPosition(null).X;

            X.Text = mouseX.ToString();
            Y.Text = mouseY.ToString();
    }
4

1 に答える 1