How to use the external scroll bars with WPF image viewer?
In This Topic
In order to use the external scroll bars in
WpfImageViewer class is necessary to:
WpfImageViewerState class provides the following abilities for manipulating the scroll bars of
WpfImageViewer:
- changing the scroll bars position
- obtaining size of horizontal and vertical scroll bar.
Here is C#/VB.NET code that demonstrates how to use external scroll bars with
WpfImageViewer class:
public partial class WpfImageViewer_ExternalScrollBars : System.Windows.Window
{
#region Constructors
public WpfImageViewer_ExternalScrollBars()
{
InitializeComponent();
// ...
imageViewer.ImageLoaded += new System.EventHandler<Vintasoft.Imaging.ImageLoadedEventArgs>(imageViewer_ImageLoaded);
imageViewer.ZoomChanged += new System.EventHandler<Vintasoft.Imaging.UI.ZoomChangedEventArgs>(imageViewer_ZoomChanged);
imageViewer.SizeChanged += new System.Windows.SizeChangedEventHandler(imageViewer_SizeChanged);
horizontalScrollBar.ValueChanged +=
new System.Windows.RoutedPropertyChangedEventHandler<double>(ScrollBar_ValueChanged);
verticalScrollBar.ValueChanged +=
new System.Windows.RoutedPropertyChangedEventHandler<double>(ScrollBar_ValueChanged);
imageViewer.AutoScroll = false;
// ...
}
#endregion
#region Methods
/// <summary>
/// Image is loaded in image viewer.
/// </summary>
private void imageViewer_ImageLoaded(object sender, Vintasoft.Imaging.ImageLoadedEventArgs e)
{
SetScrollBarsParams();
}
/// <summary>
/// Image viewer size is changed.
/// </summary>
private void imageViewer_SizeChanged(object sender, System.Windows.SizeChangedEventArgs e)
{
SetScrollBarsParams();
}
/// <summary>
/// Image viewer zoom is changed.
/// </summary>
private void imageViewer_ZoomChanged(object sender, Vintasoft.Imaging.UI.ZoomChangedEventArgs e)
{
SetScrollBarsParams();
}
/// <summary>
/// Sets parameters of scroll bars.
/// </summary>
private void SetScrollBarsParams()
{
// initialize horizontal scroll bar
horizontalScrollBar.Minimum = 0;
horizontalScrollBar.Maximum = imageViewer.ViewerState.AutoScrollSize.Width;
horizontalScrollBar.Track.ViewportSize = imageViewer.ActualWidth;
// initialize vertical scroll bar
verticalScrollBar.Minimum = 0;
verticalScrollBar.Maximum = imageViewer.ViewerState.AutoScrollSize.Height;
verticalScrollBar.Track.ViewportSize = imageViewer.ActualHeight;
}
/// <summary>
/// Scroolbar is changed.
/// </summary>
private void ScrollBar_ValueChanged(object sender, System.Windows.RoutedPropertyChangedEventArgs<double> e)
{
System.Windows.Point currentPosition =
new System.Windows.Point(horizontalScrollBar.Value, verticalScrollBar.Value);
imageViewer.ViewerState.AutoScrollPosition = currentPosition;
}
#endregion
}
Public Partial Class WpfImageViewer_ExternalScrollBars
Inherits System.Windows.Window
#Region "Constructors"
Public Sub New()
InitializeComponent()
' ...
AddHandler imageViewer.ImageLoaded, New System.EventHandler(Of Vintasoft.Imaging.ImageLoadedEventArgs)(AddressOf imageViewer_ImageLoaded)
AddHandler imageViewer.ZoomChanged, New System.EventHandler(Of Vintasoft.Imaging.UI.ZoomChangedEventArgs)(AddressOf imageViewer_ZoomChanged)
AddHandler imageViewer.SizeChanged, New System.Windows.SizeChangedEventHandler(AddressOf imageViewer_SizeChanged)
AddHandler horizontalScrollBar.ValueChanged, New System.Windows.RoutedPropertyChangedEventHandler(Of Double)(AddressOf ScrollBar_ValueChanged)
AddHandler verticalScrollBar.ValueChanged, New System.Windows.RoutedPropertyChangedEventHandler(Of Double)(AddressOf ScrollBar_ValueChanged)
' ...
imageViewer.AutoScroll = False
End Sub
#End Region
#Region "Methods"
''' <summary>
''' Image is loaded in image viewer.
''' </summary>
Private Sub imageViewer_ImageLoaded(sender As Object, e As Vintasoft.Imaging.ImageLoadedEventArgs)
SetScrollBarsParams()
End Sub
''' <summary>
''' Image viewer size is changed.
''' </summary>
Private Sub imageViewer_SizeChanged(sender As Object, e As System.Windows.SizeChangedEventArgs)
SetScrollBarsParams()
End Sub
''' <summary>
''' Image viewer zoom is changed.
''' </summary>
Private Sub imageViewer_ZoomChanged(sender As Object, e As Vintasoft.Imaging.UI.ZoomChangedEventArgs)
SetScrollBarsParams()
End Sub
''' <summary>
''' Sets parameters of scroll bars.
''' </summary>
Private Sub SetScrollBarsParams()
' initialize horizontal scroll bar
horizontalScrollBar.Minimum = 0
horizontalScrollBar.Maximum = imageViewer.ViewerState.AutoScrollSize.Width
horizontalScrollBar.Track.ViewportSize = imageViewer.ActualWidth
' initialize vertical scroll bar
verticalScrollBar.Minimum = 0
verticalScrollBar.Maximum = imageViewer.ViewerState.AutoScrollSize.Height
verticalScrollBar.Track.ViewportSize = imageViewer.ActualHeight
End Sub
''' <summary>
''' Scroolbar is changed.
''' </summary>
Private Sub ScrollBar_ValueChanged(sender As Object, e As System.Windows.RoutedPropertyChangedEventArgs(Of Double))
Dim currentPosition As New System.Windows.Point(horizontalScrollBar.Value, verticalScrollBar.Value)
imageViewer.ViewerState.AutoScrollPosition = currentPosition
End Sub
#End Region
End Class