[12762] | 1 | <Page x:Class="WpfTestSvgSample.DrawingPage"
|
---|
| 2 | xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
---|
| 3 | xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
---|
| 4 | xmlns:svg="http://sharpvectors.codeplex.com/runtime/"
|
---|
| 5 | xmlns:local="clr-namespace:WpfTestSvgSample;assembly="
|
---|
| 6 | Title="DrawingPage" Background="White"
|
---|
| 7 | FocusManager.FocusedElement="{Binding ElementName=canvasScroller}">
|
---|
| 8 | <Page.Resources>
|
---|
| 9 | <!-- UI commands. -->
|
---|
| 10 | <RoutedUICommand x:Key="Commands.ZoomOut" />
|
---|
| 11 | <RoutedUICommand x:Key="Commands.ZoomIn" />
|
---|
| 12 | <RoutedUICommand x:Key="Commands.Fill" />
|
---|
| 13 |
|
---|
| 14 | <!-- This converts from a scale value to a percentage value.
|
---|
| 15 | It is used to convert the value of 'ContentScale' to the percentage zoom level that is displayed in the UI. -->
|
---|
| 16 | <local:ScaleToPercentConverter x:Key="scaleToPercentConverter"/>
|
---|
| 17 | </Page.Resources>
|
---|
| 18 |
|
---|
| 19 | <Page.InputBindings>
|
---|
| 20 | <!-- Bind keys to commands. -->
|
---|
| 21 | <KeyBinding Key="Minus" Command="{StaticResource Commands.ZoomOut}"/>
|
---|
| 22 | <KeyBinding Key="Plus" Command="{StaticResource Commands.ZoomIn}"/>
|
---|
| 23 | </Page.InputBindings>
|
---|
| 24 |
|
---|
| 25 | <Page.CommandBindings>
|
---|
| 26 | <!-- Bind commands to event handlers. -->
|
---|
| 27 | <CommandBinding Command="{StaticResource Commands.ZoomOut}"
|
---|
| 28 | Executed="OnZoomOut"/>
|
---|
| 29 | <CommandBinding Command="{StaticResource Commands.ZoomIn}"
|
---|
| 30 | Executed="OnZoomIn"/>
|
---|
| 31 | <CommandBinding Command="{StaticResource Commands.Fill}"
|
---|
| 32 | Executed="OnZoomFit"/>
|
---|
| 33 | </Page.CommandBindings>
|
---|
| 34 |
|
---|
| 35 | <DockPanel LastChildFill="True">
|
---|
| 36 | <ToolBar DockPanel.Dock="Top" Height="32">
|
---|
| 37 | <ToolBar.Resources>
|
---|
| 38 | <Style TargetType="{x:Type Image}">
|
---|
| 39 | <Style.Triggers>
|
---|
| 40 | <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type ButtonBase}, AncestorLevel=1}, Path=IsEnabled}" Value="False">
|
---|
| 41 | <Setter Property="Opacity" Value="0.30" />
|
---|
| 42 | </DataTrigger>
|
---|
| 43 | </Style.Triggers>
|
---|
| 44 | </Style>
|
---|
| 45 | </ToolBar.Resources>
|
---|
| 46 | <Button Click="OnZoomIn" Height="24" Width="24" ToolTip="Zoom In">
|
---|
| 47 | <Image Source="Images/ZoomIn.png" Height="16"/>
|
---|
| 48 | </Button>
|
---|
| 49 | <Button Click="OnResetZoom" Height="24" Width="24" ToolTip="Reset Zoom">
|
---|
| 50 | <Image Source="Images/ZoomReset.png" Height="16"/>
|
---|
| 51 | </Button>
|
---|
| 52 | <Button Click="OnZoomOut" Height="24" Width="24" ToolTip="Zoom Out">
|
---|
| 53 | <Image Source="Images/ZoomOut.png" Height="16"/>
|
---|
| 54 | </Button>
|
---|
| 55 | <Separator/>
|
---|
| 56 |
|
---|
| 57 | <!-- This is the label that shows what the current zoom level
|
---|
| 58 | is while zooming in and out. -->
|
---|
| 59 | <TextBlock MinWidth="24" VerticalAlignment="Center"
|
---|
| 60 | HorizontalAlignment="Right" TextAlignment="Right"
|
---|
| 61 | Text="{Binding ElementName=zoomPanControl, Path=ContentScale, Converter={StaticResource scaleToPercentConverter}}"/>
|
---|
| 62 | <TextBlock VerticalAlignment="Center" Text="%"/>
|
---|
| 63 |
|
---|
| 64 | <!-- Slider to change the current zoom level. -->
|
---|
| 65 | <Slider Name="zoomSlider" Width="250" Padding="0" Minimum="10" LargeChange="20"
|
---|
| 66 | TickFrequency="10" Maximum="500" SmallChange="10" TickPlacement="TopLeft"
|
---|
| 67 | Value="{Binding ElementName=zoomPanControl, Path=ContentScale, Converter={StaticResource scaleToPercentConverter}}"/>
|
---|
| 68 | <!-- The fill button. Causes the content to be scaled so that it fits in the viewport.-->
|
---|
| 69 | <Button Height="24" Width="24" Click="OnZoomFitClick" Content="Fit"/>
|
---|
| 70 |
|
---|
| 71 | <Separator/>
|
---|
| 72 | <ToggleButton Name="tbbPanning" Click="OnPanClick" Height="24" Width="24" ToolTip="Toggle Panning">
|
---|
| 73 | <Image Source="Images/Panning.png" Height="16"/>
|
---|
| 74 | </ToggleButton>
|
---|
| 75 | </ToolBar>
|
---|
| 76 |
|
---|
| 77 | <!-- Wrap the ZoomAndPanControl in a ScrollViewer.
|
---|
| 78 | When the scaled content that is displayed in ZoomAndPanControl is larger than the viewport onto the content
|
---|
| 79 | ScrollViewer's scrollbars can be used to manipulate the offset of the viewport. -->
|
---|
| 80 | <ScrollViewer x:Name="canvasScroller" CanContentScroll="True" Padding="4"
|
---|
| 81 | VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible" AllowDrop="True">
|
---|
| 82 |
|
---|
| 83 | <!-- This is the control that handles zooming and panning. -->
|
---|
| 84 | <svg:ZoomPanControl x:Name="zoomPanControl" Background="LightGray"
|
---|
| 85 | MouseDown="OnZoomPanMouseDown" MouseUp="OnZoomPanMouseUp"
|
---|
| 86 | MouseMove="OnZoomPanMouseMove" MouseWheel="OnZoomPanMouseWheel">
|
---|
| 87 |
|
---|
| 88 | <!-- This Canvas is the content that is displayed by the ZoomPanControl.
|
---|
| 89 | Width and Height determine the size of the content. -->
|
---|
| 90 | <svg:SvgDrawingCanvas x:Name="svgViewer" Background="White"/>
|
---|
| 91 |
|
---|
| 92 | </svg:ZoomPanControl>
|
---|
| 93 |
|
---|
| 94 | </ScrollViewer>
|
---|
| 95 | </DockPanel>
|
---|
| 96 | </Page>
|
---|