Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I have a canvas control within my main window that when a button is clicked adds an image (from path) to the canvas.

When these images are added I need to be able to drag these around, which I can do when these are added via xaml with mouseMove etc, but due to click event handler is done in C#, how do I add these settings in C#

using xaml to drag etc - not ideal for dynamic adding image/shapes

<!-- see below for drag functionality -->
<!-- 

//these are the xaml settings
//MouseLeftButtonDown = "shape_MouseLeftButtonDown" 
//MouseLeftButtonUp = "shape_MouseLeftButtonUp" 
//MouseMove = "shape_MouseMove"

-->

<Rectangle x:Name="semiTrailer" Fill="Red" Height="100" Stroke="Black" Width="319" HorizontalAlignment="Left" VerticalAlignment="Bottom" Canvas.Left="48" Canvas.Top="220" MouseLeftButtonDown="shape_MouseLeftButtonDown" MouseLeftButtonUp="shape_MouseLeftButtonUp" MouseMove="shape_MouseMove"/>

Click Handler - how to add the move, click settings here

private void addSemiOnly_Click(object sender, RoutedEventArgs e)
    {

        try {
            Image img;
            img = new Image();
            img.Source = new BitmapImage(new Uri(@"/NexansOlexProcessTools;component/Images/canvasImages/BTrailerOnlyTypeA.png", UriKind.Relative));

            //these are the xaml settings
            //MouseLeftButtonDown = "shape_MouseLeftButtonDown" 
            //MouseLeftButtonUp = "shape_MouseLeftButtonUp" 
            //MouseMove = "shape_MouseMove"

            //sets height works!
            img.Height = 60;

            //how to also add
            //these are the xaml settings
            //MouseLeftButtonDown = "shape_MouseLeftButtonDown" 
            //MouseLeftButtonUp = "shape_MouseLeftButtonUp" 
            //MouseMove = "shape_MouseMove"


            LayoutRoot.Children.Add(img);

        }
        catch (Exception drawError)
        {


        }
    }

Functions to do drag features - works for xaml added canvas items

    private void shape_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        source = (UIElement)sender;
        Mouse.Capture(source);
        captured = true;
        x_shape = Canvas.GetLeft(source);
        x_canvas = e.GetPosition(LayoutRoot).X;
        y_shape = Canvas.GetTop(source);
        y_canvas = e.GetPosition(LayoutRoot).Y;
    }

    private void shape_MouseMove(object sender, MouseEventArgs e)
    {
        if (captured)
        {
            double x = e.GetPosition(LayoutRoot).X;
            double y = e.GetPosition(LayoutRoot).Y;
            x_shape += x - x_canvas;
            Canvas.SetLeft(source, x_shape);
            x_canvas = x;
            y_shape += y - y_canvas;
            Canvas.SetTop(source, y_shape);
            y_canvas = y;
        }
    }

    private void shape_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        Mouse.Capture(null);
        captured = false;
    }
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
307 views
Welcome To Ask or Share your Answers For Others

1 Answer

Got it working inside the button click handler, see below code which adds the required events + the importance of setting the Canvas.Left, Canvas.Top values

            Image img;
            img = new Image();
            img.Source = new BitmapImage(new Uri(@"/NexansOlexProcessTools;component/Images/canvasImages/BTrailerOnlyTypeA.png", UriKind.Relative));

            //Set Canvas vales - very important
            //Canvas.Left = "141" 
            //Canvas.Top = "116"
            Canvas.SetLeft(img, 150);
            Canvas.SetTop(img, 130);

            //set maouse events handlers for each item
            img.MouseMove += new MouseEventHandler(shape_MouseMove);
            img.MouseLeftButtonDown += new MouseButtonEventHandler(shape_MouseLeftButtonDown);
            img.MouseLeftButtonUp += new MouseButtonEventHandler(shape_MouseLeftButtonUp);
            //xaml settings
            //MouseLeftButtonDown = "shape_MouseLeftButtonDown" 
            //MouseLeftButtonUp = "shape_MouseLeftButtonUp" 
            //MouseMove = "shape_MouseMove"
            addSemiOnlyCount++;
            img.Tag = "addSemiOnlyId_" + addSemiOnlyCount;
            img.Name = "addSemiOnlyId_" + addSemiOnlyCount;
            img.ToolTip = "Item ID: addSemiOnlyId_" + addSemiOnlyCount;
            img.Height = 90;


            LayoutRoot.Children.Add(img);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...