WPF C # Path: Как получить из строки с данными пути к геометрии в коде (не в XAML) - PullRequest
67 голосов
/ 08 января 2010

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

Ответы [ 3 ]

130 голосов
/ 08 января 2010
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.

20 голосов
/ 26 апреля 2013

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

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

Надеюсь, это поможет вам.

3 голосов
/ 03 декабря 2015

Для создания геометрии из исходной текстовой строки Вы можете использовать класс 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...