WPF С# Путь: как получить из строки с данными пути в геометрию в коде (не в XAML)
Я хочу создать объект Path WPF в Code.
В XAML я могу это сделать:
<Path Data="M 100,200 C 100,25 400,350 400,175 H 280">
Как я могу сделать то же самое в коде?
Path path = new Path();
Path.Data = "foo"; //This won't accept a string as path data.
Существует ли доступный класс/метод, который преобразует строку с PathData в PathGeometry или аналогичную?
Как бы то ни было, XAML анализируется и преобразуется строка данных?
Ответы
Ответ 1
var path = new Path();
path.Data = Geometry.Parse("M 100,200 C 100,25 400,350 400,175 H 280");
Path.Data имеет тип Geometry. Используя Reflector JustDecompile (eff Red Gate), я просмотрел определение Geometry для его TypeConverterAttribute (которое сериализатор xaml использует для преобразования значений типа string
в Geometry
). Это указывало на GeometryConverter. Проверив реализацию, я увидел, что она использует Geometry.Parse
для преобразования строкового значения пути в экземпляр Geometry.
Ответ 2
Вы можете использовать механизм привязки.
var b = new Binding
{
Source = "M 100,200 C 100,25 400,350 400,175 H 280"
};
BindingOperations.SetBinding(path, Path.DataProperty, b);
Надеюсь, это поможет вам.
Ответ 3
Чтобы сделать геометрию из исходной текстовой строки Вы можете использовать класс System.Windows.Media.FormattedText со способом 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;
}