Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @DevExpressExampleBot
3 changes: 1 addition & 2 deletions Readme.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<!-- default badges list -->
![](https://img.shields.io/endpoint?url=https://codecentral.devexpress.com/api/v1/VersionRange/386340976/24.2.1%2B)
[![](https://img.shields.io/badge/Open_in_DevExpress_Support_Center-FF7200?style=flat-square&logo=DevExpress&logoColor=white)](https://supportcenter.devexpress.com/ticket/details/T1014709)
[![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183)
[![](https://img.shields.io/badge/💬_Leave_Feedback-feecdd?style=flat-square)](#does-this-example-address-your-development-requirementsobjectives)
Expand All @@ -21,7 +20,7 @@ This example uses an Adorner element to add a selection rectangle to PdfViewerCo
<!-- feedback -->
## Does this example address your development requirements/objectives?

[<img src="https://www.devexpress.com/support/examples/i/yes-button.svg"/>](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=how-to-draw-a-rectangle-over-a-PDF-document&~~~was_helpful=yes) [<img src="https://www.devexpress.com/support/examples/i/no-button.svg"/>](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=how-to-draw-a-rectangle-over-a-PDF-document&~~~was_helpful=no)
[<img src="https://www.devexpress.com/support/examples/i/yes-button.svg"/>](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=wpf-pdf-viewer-draw-a-rectangle-over-a-document&~~~was_helpful=yes) [<img src="https://www.devexpress.com/support/examples/i/no-button.svg"/>](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=wpf-pdf-viewer-draw-a-rectangle-over-a-document&~~~was_helpful=no)

(you will be redirected to DevExpress.com to submit your response)
<!-- feedback end -->
2 changes: 1 addition & 1 deletion VB/App.config
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
Expand Down
8 changes: 8 additions & 0 deletions VB/App.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>

</Application.Resources>
</Application>
13 changes: 13 additions & 0 deletions VB/App.xaml.vb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Imports System.Linq
Imports System.Threading.Tasks

Namespace WpfApplication1

''' <summary>
''' Logica di interazione per App.xaml
''' </summary>
Public Partial Class App
Inherits Application

End Class
End Namespace
Binary file modified VB/Demo.pdf
Binary file not shown.
23 changes: 14 additions & 9 deletions VB/MainWindow.xaml.vb
Original file line number Diff line number Diff line change
@@ -1,28 +1,33 @@
Imports System
Imports System.Windows
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks
Imports System.Windows.Controls
Imports System.Windows.Data
Imports System.Windows.Documents
Imports System.Windows.Input
Imports System.Windows.Media
Imports System.Windows.Media.Imaging
Imports System.Windows.Navigation
Imports System.Windows.Shapes
Imports DevExpress.Pdf

Namespace WpfApplication1

''' <summary>
''' Logica di interazione per MainWindow.xaml
''' </summary>
Public Partial Class MainWindow
Inherits DevExpress.Xpf.Core.ThemedWindow

Public Sub New()
Me.InitializeComponent()
Me.pdfView.DocumentSource = "Demo.pdf"
InitializeComponent()
pdfView.DocumentSource = "Demo.pdf"
End Sub

Private Sub PdfSelectionBehavior_PdfSelectionChanged(ByVal sender As Object, ByVal args As PdfSelectionChangedEventArgs)
Dim p1 As PdfPoint = args.StartPosition.Point
Dim p2 As PdfPoint = args.EndPosition.Point
Dim rect As PdfRectangle = New PdfRectangle(Math.Min(p1.X, p2.X), Math.Min(p1.Y, p2.Y), Math.Max(p1.X, p2.X), Math.Max(p1.Y, p2.Y))
Dim pdfDocumentArea As PdfDocumentArea = New PdfDocumentArea(args.StartPosition.PageNumber, rect)
Me.txtText.Text = Me.pdfView.GetText(pdfDocumentArea)
Me.txtPositions.Text = $"Start position: {args.StartPosition.Point.X}, {args.StartPosition.Point.Y}
txtText.Text = pdfView.GetText(pdfDocumentArea)
txtPositions.Text = $"Start position: {args.StartPosition.Point.X}, {args.StartPosition.Point.Y}
End Position: " & $"{args.EndPosition.Point.X}, {args.EndPosition.Point.Y}"
End Sub
End Class
Expand Down
30 changes: 16 additions & 14 deletions VB/PdfSelectionBehavior.vb
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
Imports System.Linq
Imports System.Windows
Imports System.Text
Imports System.Windows.Documents
Imports System.Windows.Input
Imports System.Windows.Media
Imports DevExpress.Mvvm.UI.Interactivity
Imports DevExpress.Xpf.PdfViewer
Imports DevExpress.Mvvm.UI
Imports DevExpress.Xpf.DocumentViewer
Imports DevExpress.Pdf
Imports System.Windows.Threading

Namespace WpfApplication1

Expand Down Expand Up @@ -39,29 +41,29 @@ Namespace WpfApplication1
If AssociatedObject.IsLoaded Then
CreateAdorner()
Else
AddHandler AssociatedObject.Loaded, AddressOf OnLoaded
Me.AssociatedObject.Loaded += AddressOf OnLoaded
End If
End Sub

Private Sub OnLoaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
RemoveHandler AssociatedObject.Loaded, AddressOf OnLoaded
Me.AssociatedObject.Loaded -= AddressOf OnLoaded
CreateAdorner()
End Sub

Protected Overridable Sub CreateAdorner()
AddHandler AssociatedObject.PreviewMouseLeftButtonDown, AddressOf OnPreviewMouseLeftButtonDown
AddHandler AssociatedObject.PreviewMouseLeftButtonUp, AddressOf OnPreviewMouseLeftButtonUp
AddHandler AssociatedObject.PreviewMouseMove, AddressOf OnPreviewMouseMove
Me.AssociatedObject.PreviewMouseLeftButtonDown += AddressOf OnPreviewMouseLeftButtonDown
Me.AssociatedObject.PreviewMouseLeftButtonUp += AddressOf OnPreviewMouseLeftButtonUp
Me.AssociatedObject.PreviewMouseMove += AddressOf OnPreviewMouseMove
documentPanel = LayoutTreeHelper.GetVisualChildren(AssociatedObject).OfType(Of DocumentViewerPanel)().FirstOrDefault()
If documentPanel Is Nothing Then Return
controlAdornerLayer = AdornerLayer.GetAdornerLayer(documentPanel)
selectionAdorner = New SelectionAdorner(documentPanel)
controlAdornerLayer.Add(selectionAdorner)
AddHandler selectionAdorner.PreviewMouseLeftButtonDown, AddressOf OnAdornerPreviewMouseLeftButtonDown
AddHandler selectionAdorner.PreviewMouseMove, AddressOf OnAdornerPreviewMouseMove
AddHandler selectionAdorner.PreviewMouseLeftButtonUp, AddressOf OnAdornerPreviewMouseLeftButtonUp
Dim scrollViewer As DevExpress.Xpf.PdfViewer.DXScrollViewer = LayoutTreeHelper.GetVisualChildren(AssociatedObject).OfType(Of DevExpress.Xpf.PdfViewer.DXScrollViewer)().FirstOrDefault(Function(x) Equals(x.Name, "PART_ScrollViewer"))
AddHandler scrollViewer.ScrollChanged, AddressOf OnScrollChanged
Me.selectionAdorner.PreviewMouseLeftButtonDown += AddressOf OnAdornerPreviewMouseLeftButtonDown
Me.selectionAdorner.PreviewMouseMove += AddressOf OnAdornerPreviewMouseMove
Me.selectionAdorner.PreviewMouseLeftButtonUp += AddressOf OnAdornerPreviewMouseLeftButtonUp
Dim scrollViewer As DevExpress.Xpf.PdfViewer.DXScrollViewer = LayoutTreeHelper.GetVisualChildren(AssociatedObject).OfType(Of DevExpress.Xpf.PdfViewer.DXScrollViewer)().FirstOrDefault(Function(x) x.Name Is "PART_ScrollViewer")
scrollViewer.ScrollChanged += AddressOf OnScrollChanged
End Sub

Private Sub OnScrollChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.ScrollChangedEventArgs)
Expand All @@ -84,7 +86,7 @@ Namespace WpfApplication1

Private Sub OnPreviewMouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
If documentPanel Is Nothing Then Return
If documentPanel.IsMouseCaptured AndAlso e.LeftButton = MouseButtonState.Pressed Then
If documentPanel.IsMouseCaptured AndAlso e.LeftButton Is MouseButtonState.Pressed Then
Dim mouseOffset = e.GetPosition(selectionAdorner)
mouseOffset.Offset(-selectionAdorner.Location.X, -selectionAdorner.Location.Y)
selectionAdorner.OffSet = mouseOffset
Expand Down Expand Up @@ -114,7 +116,7 @@ Namespace WpfApplication1
End Sub

Private Sub OnAdornerPreviewMouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
If selectionAdorner.IsMouseCaptured AndAlso e.LeftButton = MouseButtonState.Pressed Then
If selectionAdorner.IsMouseCaptured AndAlso e.LeftButton Is MouseButtonState.Pressed Then
Dim mouseOffset = e.GetPosition(selectionAdorner)
mouseOffset.Offset(-mouseStartPoint.X, -mouseStartPoint.Y)
mouseStartPoint = e.GetPosition(selectionAdorner)
Expand Down Expand Up @@ -144,7 +146,7 @@ Namespace WpfApplication1
End Sub

Protected Overrides Sub OnDetaching()
RemoveHandler AssociatedObject.Loaded, AddressOf OnLoaded
Me.AssociatedObject.Loaded -= AddressOf OnLoaded
DestroyAdorner()
MyBase.OnDetaching()
End Sub
Expand Down
2 changes: 1 addition & 1 deletion VB/PdfSelectionChangedEventArgs.vb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Imports DevExpress.Pdf
Imports System
Imports System.Linq

Namespace WpfApplication1

Expand Down
2 changes: 1 addition & 1 deletion VB/Properties/AssemblyInfo.vb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Imports System.Reflection
Imports System.Resources
Imports System.Runtime.InteropServices
Imports System.Windows

' Le informazioni generali relative a un assembly sono controllate dal seguente
' set di attributi. Per modificare le informazioni associate a un assembly
Expand Down
4 changes: 2 additions & 2 deletions VB/SelectionAdorner.vb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Imports DevExpress.Xpf.DocumentViewer
Imports System.Windows
Imports System.Linq
Imports System.Windows.Documents
Imports System.Windows.Media

Expand Down Expand Up @@ -41,7 +41,7 @@ Namespace WpfApplication1
renderBrush.Opacity = 0.2
Dim renderPen As Pen = New Pen(New SolidColorBrush(Colors.Navy), 1.5)
Dim selectionLocation = Location
If OffSet.X <> 0 OrElse OffSet.Y <> 0 Then drawingContext.DrawRectangle(renderBrush, renderPen, New Rect(selectionLocation, Point.Subtract(OffSet, New Point())))
If OffSet.X IsNot 0 OrElse OffSet.Y IsNot 0 Then drawingContext.DrawRectangle(renderBrush, renderPen, New Rect(selectionLocation, Point.Subtract(OffSet, New Point())))
End Sub
End Class
End Namespace
23 changes: 6 additions & 17 deletions VB/WpfApplication1.vbproj
Original file line number Diff line number Diff line change
@@ -1,26 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OptionInfer>On</OptionInfer>
<TargetFramework>net8.0-windows</TargetFramework>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace></RootNamespace>
<WarningLevel>4</WarningLevel>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<UseWindowsForms>false</UseWindowsForms>
<UseWPF>true</UseWPF>
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
<EnableDefaultApplicationDefinition>false</EnableDefaultApplicationDefinition>
</PropertyGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Update="Properties\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<ApplicationDefinition Include="App.xaml" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\Licenses.licx" />
<None Update="Demo.pdf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
Expand All @@ -35,7 +27,4 @@
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
</ItemGroup>
<ItemGroup>
<Page Remove="App.xaml" />
</ItemGroup>
</Project>