WPF C # Путь: как получить из строки с данными пути в геометрию в коде (не в XAML)
Я хочу создать объект Path WPF в Code.
В XAML я могу это сделать:
Как я могу сделать то же самое в коде?
- Общий class наблюдаемого словаря для DataBinding / WPF C #
- Есть ли выбранная вкладка Измененное событие в стандартном WPF Tab Control
- ObservableCollection vs. List
- Является ли реализация Джошем Смитом RelayCommand ошибочной?
- Где я могу получить streamобезопасный CollectionView?
Path path = new Path(); Path.Data = "foo"; //This won't accept a string as path data.
Существует ли class / метод, который преобразует строку с PathData в PathGeometry или аналогичную?
Разумеется, каким-то образом XAML анализируется и преобразуется строка данных?
- Открыть диалоговое окно каталога
- Как узнать, какой монитор находится в окне WPF?
- Отображение видимости столбцов Bind datagrid MVVM
- почему установка ScrollViewer.CanContentScroll в false отключает виртуализацию
- MVVM Передача EventArgs в качестве параметра команды
- Как динамически добавлять RowDefinition или ColumnDefinition в Grid со связыванием?
- Изображение кнопки мыши WPF
- MVVM Dynamic Menu UI от привязки с ViewModel
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.
Вы можете использовать механизм привязки.
var b = new Binding { Source = "M 100,200 C 100,25 400,350 400,175 H 280" }; BindingOperations.SetBinding(path, Path.DataProperty, b);
Надеюсь, это поможет вам.
Чтобы сделать геометрию из исходной текстовой строки, вы можете использовать class 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; }