How to: Replace a Standard PDF Viewer Control Command with a Custom Command
- 3 minutes to read
This example shows how to modify the existing PDF Viewer command functionality.
Create a custom command provider class inherited from the PdfCommandProvider class and override its members to create a new DelegateCommand.
In this example the CustomPdfCommandProvider class overrides ZoomInCommandInternal and ZoomOutCommandInternal properties to zoom in/out to a custom zoom factor.
The delegate command constructor accepts ZoomIn and CanZoomIn (ZoomOut and CanZoomOut) delegates.
Note
The complete sample project is available on GitHub at https://github.com/DevExpress-Examples/how-to-replace-standard-pdf-viewer-command-with-custom-command
public class CustomPdfCommandProvider : PdfCommandProvider { ICommand zoomInCommandInternal; protected override ICommand ZoomInCommandInternal { get { return zoomInCommandInternal ?? (zoomInCommandInternal = new DelegateCommand(ZoomIn, CanZoomIn)); } } ICommand zoomOutCommandInternal; protected override ICommand ZoomOutCommandInternal { get { return zoomOutCommandInternal ?? (zoomOutCommandInternal = new DelegateCommand(ZoomOut, CanZoomOut)); } } void ZoomIn() { //... } bool CanZoomIn() { //... } void ZoomOut() { //... } bool CanZoomOut() { //... } }
Implement ZoomIn and CanZoomIn (ZoomOut and CanZoomOut) methods that the corresponding delegate command will call when the command is executed.
Note
Show Me The complete sample project is available on GitHub at https://github.com/DevExpress-Examples/how-to-replace-standard-pdf-viewer-command-with-custom-command
//... readonly List<double> factors = new List<double> { 0.15, 0.3, 0.45, 1, 1.25, 1.5, 2, 5 }; public PdfViewerControl Control { get { return DocumentViewer as PdfViewerControl; } } void ZoomIn() { if (Control == null) return; foreach (var zoomFactor in factors) { if (Control.ZoomFactor < zoomFactor) { Control.ZoomFactor = zoomFactor; break; } } } bool CanZoomIn() { return Control != null && Control.Document != null && Control.ZoomFactor < factors[factors.Count - 1]; } void ZoomOut() { if (Control == null) return; for (int i = factors.Count - 1; i >= 0; i--) { if (factors[i] < Control.ZoomFactor) { Control.ZoomFactor = factors[i]; break; } } } bool CanZoomOut() { return Control != null && Control.Document != null && Control.ZoomFactor > factors[0]; } //...
Use the created CustomPdfCommandProvider to substitute the default command provider.
Note
Show Me The complete sample project is available on GitHub at https://github.com/DevExpress-Examples/how-to-replace-standard-pdf-viewer-command-with-custom-command
xmlns:local="clr-namespace:DXSample" xmlns:pdfViewer="http://schemas.devexpress.com/winfx/2008/xaml/pdf" <pdfViewer:PdfViewerControl.CommandProvider> <local:CustomPdfCommandProvider/> </pdfViewer:PdfViewerControl.CommandProvider>