我需要从某个库使用PdfViewer。此库提供了Android,IOS,UWP平台的控制,但不适用于WPF平台。如何创建一个渲染器只为WPF平台?
WPF渲染器:
[assembly: ExportRenderer(typeof(PdfViewer), typeof(PdfViewerRenderer))]
public class PdfViewerRenderer : Xamarin.Forms.Platform.WPF.ViewRenderer<PdfViewer, WPF.PlatformImplementations.PdfViewer>
{
}
字符串
WPF控件实现:
namespace WPF.PlatformImplementations
{
public class PdfViewer
{
//custom implementation of pdf viewer for wpf
}
}
型
Net标准库包含PdfViewer,它从库中的SfPdfViewer派生:
namespace Views
{
public class PdfViewer : SfPdfViewer
{
//implementation of pdf viewer using base class from multiplatform library
}
}
型
上述方法不适用于WPF,适用于其他平台。当我将继承从SfPdfViewer更改为Xamarin.forms.View时,它适用于WPF,但显然不适用于其他平台。因此,问题是使渲染器机制将Views.PdfViewer识别为基于Xamarin.Forms.View的控件。
2条答案
按热度按时间5f0d552i1#
每个
Xamarin.Forms
控件都有一个随附的渲染器,用于每个需要创建本机控件示例的平台。SfPdfViewer
是一个xamarin-forms控件,它只表示共享的UI状态和交互逻辑。它需要一个相应的本地控件来实际呈现视图并与WPF
平台交互。为了做到这一点,第一步是选择一个基于
WPF
的控件来查看PDF文件。在这个例子中,我使用了WPF Pdf Viewer by SyncFusion;但是任何其他选项-可能像嵌入式WebView或像PdfiumViewer这样的开源选项也应该工作。第一步:
在WPF项目中安装Syncfusion.PdfViewer.WPF的nuget包
第二步:
使用平台渲染器将forms-element(
SfPdfViewer
)与本机控件(PdfViewerControl
)连接起来。字符串
参考Github上传的示例工程。
x1c 0d1x的数据
ny6fqffe2#
一种方法是在Core项目中创建一个
CustomPdfViewer
接口,并使用依赖注入在每个本机项目中单独实现。在每个iOS、Android和UWP项目的原生实现中,只需使用适合您的
PdfViewer
库即可。然后对于WPF,只需使用
SfPdfViewer
即可。例如:您可以通过示例查看DependencyService上的official documentation here
一旦你这样做了,你就会有你的解决方案。但是如果你想更进一步,访问你在XAML中创建的
CustomPdfViewer
,你可以使用“XAML Markup Extensions”,由术语local
表示,就像你在here例子中看到的那样。