Мне нужно встроить данные векторного пути в элемент управления изображением. В WPF есть элемент управления «Путь», который принимает данные и отображает изображение. Есть ли что-нибудь в формах Xamarin для этого?
Одним словом, нет. Xamarin Forms и WPF принципиально отличаются на уровне отрисовки.
WPF тесно интегрирован в Direct3D через milcore, что позволило разработчикам перестроить все элементы графического интерфейса Windows с нуля (кнопки, флажки, текстовые блоки и т. д.). Это, в сочетании с шаблонами, делает «P» в WPF невероятно гибким.
К сожалению, за это приходится платить огромную цену: производительность. Портативные устройства никак не могли обеспечить пропускную способность, необходимую для поддержки такого механизма, поэтому Xamarin Forms вместо этого должны были предоставлять классы, которые были реализованы с использованием собственных элементов управления графическим интерфейсом каждой соответствующей операционной системы; в этом отношении он ближе к WinForms. Это означало, что базовый набор элементов управления Xamarin Forms должен был быть любым элементом управления, общим для всех поддерживаемых типов сборки, т. е. iOS, Android, UWP и т. д. Суть в том, что все, что требует мелкой детализации Path
, вероятно, будет работать слишком медленно на эти платформы, если они реализованы в Forms, и вам все равно придется реализовать их изначально.
Если вы хотите пойти по этому пути самостоятельно, то это, безусловно, можно сделать, создав пользовательский элемент управления в вашем проекте PCL на основе View
(скажем), а затем предоставив собственный рендерер для него в каждой из ваших целей, то есть что-то вроде этого:
// Android renderer for your custom control
[assembly: ExportRenderer(typeof(YourCustomControl), typeof(YourCustomControlRenderer))]
namespace Your.Project.Namespace
{
public class YourCustomControlRenderer : VisualElementRenderer<YourCustomControl>
{
protected override void OnDraw(Canvas canvas)
{
... etc ...
canvas.DrawRect(new RectF(drawRect), bkgPaint);
... etc ...
}
}
}
Или, как указывает SushiuHangover, вы можете использовать стороннюю библиотеку, которая в любом случае просто будет делать это.
Как насчет SkiaSharp: docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/… (есть также расширение SVG для Skiasharp, если у вас есть векторы в этом формате nuget.org/packages/SkiaSharp.Svg)