2016-04-22 9 views
1

Ich möchte eine Form auf Leinwand zeichnen, die als Form behandelt werden soll, bedeutet nach dem Zeichnen kann ich auswählen, verschieben, aus der Leinwand löschen. Es könnte ein Alphabet oder eine Zahl oder ein Kreis sein, was alles sein könnte, was wir auf Leinwand wie MSPaint zeichnen können.wie auf Leinwand ohne Tinte-Manager in Metro-Stil-Anwendungen zu zeichnen

Und ich möchte nicht den Inkmanager verwenden, weil das nicht für UWP (https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.input.inking.inkmanager.aspx) empfohlen wird. Ist dies möglich ohne inkmanage zu verwenden? hier ist der Code auf Zeiger auf Leinwand

bewegt
void AddPencil(Windows.UI.Xaml.Input.PointerRoutedEventArgs e) 
    { 
     if (PenID != 0) 
     { 
      PointerPoint pt = e.GetCurrentPoint(_drawCanvas); 

      CurrentContactPoint = pt.Position; 
      X1 = PreviousContactPoint.X; 
      Y1 = PreviousContactPoint.Y; 
      X2 = CurrentContactPoint.X; 
      Y2 = CurrentContactPoint.Y; 

      if (Distance(X1, Y1, X2, Y2) > 2.0) 
      { 
       Line line = new Line() 
        { 
         X1 = X1, 
         Y1 = Y1, 
         X2 = X2, 
         Y2 = Y2, 
         StrokeThickness = 5, 
         Stroke = new SolidColorBrush(Colors.Violet) 
        }; 
       _drawCanvas.Children.Add(line); 
      } 


      PathFigure pthFigure = new PathFigure(); 
      pthFigure.StartPoint = PreviousContactPoint; 
      BezierSegment bzSeg = new BezierSegment(); 
      Point p1 = new Point(); 
      p1.X = X1; 
      p1.Y = Y1; 
      Point p2 = new Point(); 
      p2.X = X2; 
      p2.Y = Y2; 
      bzSeg.Point1 = p1; 
       bzSeg.Point2 =p2; 
       bzSeg.Point3 = CurrentContactPoint; 

      PathSegmentCollection myPathSegmentCollection = new PathSegmentCollection(); 
      myPathSegmentCollection.Add(bzSeg); 

      pthFigure.Segments = myPathSegmentCollection; 

      if (pthFigureCollection == null) 
       pthFigureCollection = new PathFigureCollection(); 
      pthFigureCollection.Add(pthFigure); 
      PreviousContactPoint = CurrentContactPoint; 
     } 
    } 

Und Code in Zeiger freigegeben Ereignis.

List<UIElement> uielementscolctn = new List<UIElement>(); 
      foreach(var item in _drawCanvas.Children) 
      { 
       var x = item as Line; 

       uielementscolctn.Add(x); 
      } 
      foreach (var uielenmt in uielementscolctn) 
      { 
       _drawCanvas.Children.Remove(uielenmt); 
      } 
      PathGeometry pthGeometry = new PathGeometry(); 
      pthGeometry.Figures = pthFigureCollection; 
      arcPath = new Path(); 
      arcPath.Tapped+=arcPath_Tapped; 
      translateTransform_ = new TranslateTransform(); 
      translateTransform_.X = 0.0; 
      translateTransform_.Y = 0.0; 

      scaleTransform_ = new ScaleTransform(); 
      scaleTransform_.ScaleX = 0.0; 
      scaleTransform_.ScaleY = 0.0; 




      arcPath.ManipulationMode = MarkupBase.manipulationMode_; 

      arcPath.ManipulationStarted += arcPath_ManipulationStarted; 
      arcPath.ManipulationDelta += arcPath_ManipulationDelta; 
      arcPath.Stroke = new SolidColorBrush(Colors.Violet); 
      arcPath.StrokeThickness = 5; 

      arcPath.Data = pthGeometry; 

      originalBounds_ = arcPath.Data.Bounds; 
      _drawCanvas.Children.Add(arcPath); 
      arcPath.Data.Transform = tgroup; 
      PenID = 0; 
      Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Arrow, 1); 
      pthFigureCollection = null; 

unfähig, die Pfadform zu manipulieren, weil, wenn überhaupt geändert I-Wert als arcPath.Data.Transform = tgroup; Die Datengrenzen des Pfads werden zu Null.

Antwort

0

Haben Sie versucht, InkCanvas zu betrachten? Dies ist die Art und Weise zu tun, was Sie wollen, auch in UWP-Apps.

https://msdn.microsoft.com/library/windows/apps/windows.ui.xaml.controls.inkcanvas.aspx

+0

InkCanvas ist nicht für Windows 8.1-Anwendungen verfügbar. Könnten wir einen Pfad (Form) manipulieren? – user1151378

+0

Meine Idee ist, alle Stokes als Pfad zu machen und Manipulationsoperationen für diesen Pfad auszuführen. – user1151378

+0

Warum sprichst du über Windows 8.1? Ist es das Ziel-Betriebssystem? –

0

Verwendung Polyliniensegments anstelle von Bezier-Segment.