WPF C# Path: как получить из строки с данными пути к геометрии в коде (не в XAML)



Я хочу создать объект пути WPF в коде.



в 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 анализируется и преобразуется строка данных?

865   3  

3 ответов:

var path = new Path();
path.Data = Geometry.Parse("M 100,200 C 100,25 400,350 400,175 H 280");

путь.Данные имеют тип Geometry. Используя отражатель JustDecompile (eff Red Gate), Я посмотрел на определение геометрии для его TypeConverterAttribute (который сериализатор xaml использует для преобразования значений типа string to Geometry). Это указало мне на GeometryConverter. Проверяя реализацию, я увидел, что она использует Geometry.Parse для преобразования строкового значения пути в экземпляр геометрии.

вы можете использовать механизм привязки.

var b = new Binding
{
   Source = "M 100,200 C 100,25 400,350 400,175 H 280"
};
BindingOperations.SetBinding(path, Path.DataProperty, b);

Я надеюсь, что это помогает вам.

чтобы сделать геометрию из исходной текстовой строки, вы можете использовать System.Окна.Сми.Класс 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;
    }

Comments

    Ничего не найдено.