c# - ellipsegeometry - wpf canvas path
WPF C#Path: Cómo pasar de una cadena con Datos de ruta a Geometría en Código(no en XAML) (3)
Para hacer geometría a partir de una cadena de texto original, puede usar la clase System.Windows.Media.FormattedText con el método BuildGeometry ()
public string Text2Path()
{
FormattedText formattedText = new System.Windows.Media.FormattedText("Any text you like",
CultureInfo.GetCultureInfo("en-us"),
FlowDirection.LeftToRight,
new Typeface(
new FontFamily(),
FontStyles.Italic,
FontWeights.Bold,
FontStretches.Normal),
16, Brushes.Black);
Geometry geometry = formattedText.BuildGeometry(new Point(0, 0));
System.Windows.Shapes.Path path = new System.Windows.Shapes.Path();
path.Data = geometry;
string geometryAsString = geometry.GetFlattenedPathGeometry().ToString().Replace(",",".").Replace(";",",");
return geometryAsString;
}
Quiero generar un objeto de ruta WPF en Código.
En XAML puedo hacer esto:
<Path Data="M 100,200 C 100,25 400,350 400,175 H 280">
¿Cómo puedo hacer lo mismo en el Código?
Path path = new Path();
Path.Data = "foo"; //This won''t accept a string as path data.
¿Hay una clase / Método disponible que convierta la cadena con PathData a PathGeometry o similar?
¿Seguramente de alguna manera el XAML se analiza y la cadena de datos se convierte?
Podría usar el mecanismo de encuadernación.
var b = new Binding
{
Source = "M 100,200 C 100,25 400,350 400,175 H 280"
};
BindingOperations.SetBinding(path, Path.DataProperty, b);
Espero que te ayude.
var path = new Path();
path.Data = Geometry.Parse("M 100,200 C 100,25 400,350 400,175 H 280");
Path.Data es de tipo Geometry. Usando Reflector JustDecompile (eff Red Gate) , miré la definición de Geometría para su TypeConverterAttribute (que el serializador xaml usa para convertir valores de tipo string
a Geometry
). Esto me indicó el GeometryConverter. Comprobando la implementación, vi que usa Geometry.Parse
para convertir el valor de cadena de la ruta a una instancia de Geometry.