2017-05-20 11 views
-2

メインウィンドウ内にキャンバスコントロールがあり、ボタンをクリックするとキャンバスに画像が追加されます。WPFの設定でキャンバスに子画像を追加するC#

これらの画像が追加されたら、これらをドラッグできるようにする必要があります。これはmouseMoveなどでxamlを使って追加できますが、ClickイベントハンドラはC#で行われるため、 C#でなどドラッグするXAMLを使用して

- ダイナミック加えるイメージのための理想的ではありませんが、/

<!-- 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"/> 

クリックハンドラを形作る - 動きを追加する方法を、ここでの設定

をクリックしてくださいドラッグ機能を行うためにの
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) 
     { 


     } 
    } 

機能 - それは、ボタンのクリックハンドラ内部の作業を手に入れたXAMLの作品はキャンバスの項目に

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; 
    } 
+0

img.MouseMove + =新しいMouseEventHandler(shape_MouseMove); img.MouseLeftButtonDown + =新しいMouseButtonEventHandler(shape_MouseLeftButtonDown); img.MouseLeftButtonUp + =新しいMouseButtonEventHandler(shape_MouseLeftButtonUp);イベントをキャプチャしないでドラッグを有効にしない – BENN1TH

答えて

0

を追加し、必要なイベントを追加するコード+キャンバスを設定することの重要性下記参照。左、Canvas.Top値

  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); 
+0

問題の解決に役立つhttp://stackoverflow.com/a/9282844/1423608を参照してください。 – BENN1TH

関連する問題