Элементы управления привязкой WPF MVVM с вспомогательными методами PDFTron PDFViewer - PullRequest
0 голосов
/ 18 июня 2020

Я борюсь с проблемой WPF MVVM, используя элемент управления, который имеет вспомогательные функции и предоставляет эти вспомогательные функции моим моделям просмотра.

Я использую элемент управления просмотрщика PDFTron, который показывает объект PDFDocument. Элементы в этом PDF-документе указаны в терминах структуры PDFTron.Rect с элементами, измеренными в точках (1/72 дюйма), и номером страницы

Чтобы помочь преобразовать системы координат в положение экрана и обратно, PDFTron ViewerControl имеет различные функции на себе.

например, чтобы преобразовать из точки экрана

Double x, y;
int page = Control.GetPageNumberFromScreenPt(x, y);
Control.ConvScreenPtToPagePt(ref x, ref y, page);

преобразовать в точку экрана из исследуемого объекта

PDFTron.Rect r = Control.GetScreenRectForAnnot(embeddedObject, pageNumber);

Что лучший способ вызова / отображения или привязки к таким функциям, как эта между моделью (ами) представления и элементом управления PDF, поскольку я действительно хотел бы привязать данные к координатам.

Например, у меня есть украшение, определенное в XAML, которое позволяет мне перемещать изображение, которое я прочитал из встроенного объекта о странице, путем перетаскивания, и я также могу изменять размер изображения. Модель представления знает, как моя модель представления знает изображение встроенного объекта, его страницу и прямоугольник на этой странице, но как координаты PDF. Но это необходимо преобразовать в экранные координаты для X, Y, ширины и высоты для привязки к атрибутам XAML. Я не совсем понимаю, как это сделать, так как это выходит за рамки преобразователя данных.

Таким образом, элемент управления в xaml имеет атрибуты, измеряемые в единицах экрана

AdornerLeft="{Binding Data.X, Mode=TwoWay}"
AdornerTop="{Binding Data.Y, Mode=TwoWay}"
AdornerWidth="{Binding Data.Width, Mode=TwoWay}"
AdornerHeight="{Binding Data.Height, Mode=TwoWay}"

Если X и Y меняются, мне нужно, чтобы это изменение в конечном итоге отразилось как координаты страницы, x, y зрителя, поскольку они используются базовой моделью. Я задался вопросом, будет ли разумно создать ряд свойств зависимостей, чтобы, если я изменю одно, это повлияет на изменение других как преобразование? Так, например, у меня есть свойство ScreenY. При его изменении обновляются PDFY и PDFPage и наоборот, но это кажется слишком сложным. Есть предложения?

Ответы [ 2 ]

0 голосов
/ 24 июня 2020

Я закончил тем, что использовал библиотеку Prism и eventAggregator, чтобы передать детали обратно в представление и получить результаты, также используя события для обновления sh представления. Образец PDFWPFViewer MVVM от PdfTron, помимо некоторых проблем с неправильными привязками, по существу использует библиотеку инструментов, которая является общей и действует как библиотека форм windows, без поведения для управления перетаскиванием украшения и др. c.

0 голосов
/ 18 июня 2020

Обычно это делается во время взаимодействия с пользователем, поэтому пока пользователь перемещает и изменяет размер изображения, все отображается поверх средства просмотра PDFViewWPF.

Вы можете получить объект Canvas из PDFViewWPF.GetCanvas ( ), а затем вы можете нарисовать на нем свое изображение, если хотите.

На этом этапе ничего не связано с PDF, вы просто имеете дело с координатами WPF.

Только после того, как пользователь закончил перемещая и перетаскивая, и вы хотите добавить изображение на страницу PDF, возможно, как аннотацию Stamp, или даже вставив изображение в содержимое страницы, только тогда вы удалите всю свою графику и вставите изображение в PDF. Только в этот момент вам нужно будет выполнить перевод между системами координат.

Пожалуйста, присмотритесь к проекту PDFViewWPFTools и посмотрите, как создаются аннотации типа Rectangle.

This сообщение может дать вам дополнительную ясность.

...