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
bewegtvoid 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.
InkCanvas ist nicht für Windows 8.1-Anwendungen verfügbar. Könnten wir einen Pfad (Form) manipulieren? – user1151378
Meine Idee ist, alle Stokes als Pfad zu machen und Manipulationsoperationen für diesen Pfad auszuführen. – user1151378
Warum sprichst du über Windows 8.1? Ist es das Ziel-Betriebssystem? –