Edit this page

Command Descriptors

RadPdfViewer's command descriptors are wrappers of its predefined set of commands. They were introduced as a way to easily enable/disable the commands based on the current document state. This comes in handy in the creation of UI for the viewer such as a toolbar, context menu, etc.

The CommandDescriptor class contains 2 public properties:

  • IsEnabled(Boolean): Gets or sets if the command is enabled.

  • Command(ICommand): The command to be executed.

Creating Custom Command Descriptors

The following section demonstrates how you can create a custom command along with the respective command descriptor.

This example creates a custom command by inheriting from the FixedDocumentViewerCommandBase class.

C#

    public class FitToWidthCommand : FixedDocumentViewerCommandBase
    {
        private const double PageMargin = 20;

        public FitToWidthCommand(FixedDocumentViewerBase fixedDocumentViewerBase)
            : base(fixedDocumentViewerBase)
        {
        }

        public override void Execute(object parameter)
        {
            double width = this.Viewer.ActualWidth - 2 * PageMargin;
            double pageWidth = this.Viewer.CurrentPage.ActualWidth;
            this.Viewer.ScaleFactor = width / pageWidth;
        }
    }

VB

    Public Class FitToWidthCommand
        Inherits FixedDocumentViewerCommandBase
        Private Const PageMargin As Double = 20

        Public Sub New(fixedDocumentViewerBase As FixedDocumentViewerBase)
            MyBase.New(fixedDocumentViewerBase)
        End Sub

        Public Overrides Sub Execute(parameter As Object)
            Dim width As Double = Me.Viewer.ActualWidth - 2 * PageMargin
            Dim pageWidth As Double = Me.Viewer.CurrentPage.ActualWidth
            Me.Viewer.ScaleFactor = width / pageWidth
        End Sub
    End Class

Further, you can create a respective command descriptor with the custom command and use it for the purposes of your application. This can be achieved in one of the following ways:

  • Create a class inheriting from the DefaultCommandDescriptors class which implements the default command descriptors and add a property of type CommandDescriptor to it.

  • Create a class inheriting from the CommandDescriptors class which does not implement the default command descriptors and implement them yourself.

The below snippet demosntrates how you can use the first of the mentioned methods of creating a command descriptor.

C#

    public class CustomCommandDescriptors : DefaultCommandDescriptors
    {
        private readonly CommandDescriptor fitToWidthCommandDescriptor;

        public CommandDescriptor FitToWidthCommandDescriptor
        {
            get
            {
                return this.fitToWidthCommandDescriptor;
            }
        }

        public CustomCommandDescriptors(FixedDocumentViewerBase fixedDocumentViewerBase)
            : base(fixedDocumentViewerBase)
        {
            this.fitToWidthCommandDescriptor = new CommandDescriptor(new FitToWidthCommand(fixedDocumentViewerBase));
        }
    }

VB

    Public Class FitToWidthCommand
        Inherits FixedDocumentViewerCommandBase
        Private Const PageMargin As Double = 20

        Public Sub New(fixedDocumentViewerBase As FixedDocumentViewerBase)
            MyBase.New(fixedDocumentViewerBase)
        End Sub

        Public Overrides Sub Execute(parameter As Object)
            Dim width As Double = Me.Viewer.ActualWidth - 2 * PageMargin
            Dim pageWidth As Double = Me.Viewer.CurrentPage.ActualWidth
            Me.Viewer.ScaleFactor = width / pageWidth
        End Sub
    End Class

Once the custom command descriptors are implemented you just need to set RadPdfViewer's CommandDescriptors property.

C#

      this.customCommandDescriptors = new CustomCommandDescriptors(this.viewer);

VB

    Me.customCommandDescriptors = New CustomCommandDescriptors(Me.viewer)

You can download a runnable project of the previous example from our online SDK repository here, the example is listed as PdfViewer / CustomCommandDescriptor.