WPF 图片放大/缩小/拖动
11 Apr 2012XAML:
<Window x:Class="MouseMove.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:MouseMove" Title="Window1" Height="600" Width="800"> <Grid x:Name="MainPanel"> <Grid.Resources> <TransformGroup x:Key="ImageTransformResource"> <ScaleTransform /> <TranslateTransform /> </TransformGroup> </Grid.Resources> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Rectangle Grid.Column="0" x:Name="MasterImage" MouseLeftButtonDown="MasterImage_MouseLeftButtonDown" MouseLeftButtonUp="MasterImage_MouseLeftButtonUp" MouseMove="MasterImage_MouseMove" MouseWheel="MasterImage_MouseWheel"> <Rectangle.Fill> <VisualBrush Transform="{StaticResource ImageTransformResource}" Stretch="Uniform"> <VisualBrush.Visual> <Image Source="G:\图片\z.gif" /> </VisualBrush.Visual> </VisualBrush> </Rectangle.Fill> </Rectangle> <Rectangle Grid.Column="1" MouseLeftButtonDown="MasterImage_MouseLeftButtonDown" MouseLeftButtonUp="MasterImage_MouseLeftButtonUp" MouseMove="MasterImage_MouseMove" MouseWheel="MasterImage_MouseWheel"> <Rectangle.Fill> <VisualBrush Transform="{StaticResource ImageTransformResource}" Stretch="Uniform"> <VisualBrush.Visual> <Image Source="G:\图片\z.gif" /> </VisualBrush.Visual> </VisualBrush> </Rectangle.Fill> </Rectangle> </Grid> </Window>
CS:;
using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Diagnostics; namespace MouseMove { /// <summary> /// Interaction logic for Window1.xaml /// </summary> public partial class Window1 : Window { private bool m_IsMouseLeftButtonDown; public Window1() { InitializeComponent(); } private void MasterImage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { Rectangle rectangle = sender as Rectangle; if (rectangle == null) return; rectangle.ReleaseMouseCapture(); m_IsMouseLeftButtonDown = false; } private Point m_PreviousMousePoint; private void MasterImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Rectangle rectangle = sender as Rectangle; if (rectangle == null) return; rectangle.CaptureMouse(); m_IsMouseLeftButtonDown = true; m_PreviousMousePoint = e.GetPosition(rectangle); } private void MasterImage_MouseMove(object sender, MouseEventArgs e) { Rectangle rectangle = sender as Rectangle; if (rectangle == null) return; if (m_IsMouseLeftButtonDown) DoImageMove(rectangle, e); } private void DoImageMove(Rectangle rectangle, MouseEventArgs e) { //Debug.Assert(e.LeftButton == MouseButtonState.Pressed); if (e.LeftButton != MouseButtonState.Pressed) return; TransformGroup group = MainPanel.FindResource("ImageTransformResource") as TransformGroup; Debug.Assert(group != null); TranslateTransform transform = group.Children[1] as TranslateTransform; Point position = e.GetPosition(rectangle); transform.X += position.X - m_PreviousMousePoint.X; transform.Y += position.Y - m_PreviousMousePoint.Y; m_PreviousMousePoint = position; } private void MasterImage_MouseWheel(object sender, MouseWheelEventArgs e) { TransformGroup group = MainPanel.FindResource("ImageTransformResource") as TransformGroup; Debug.Assert(group != null); ScaleTransform transform = group.Children[0] as ScaleTransform; transform.ScaleX += e.Delta * 0.001; transform.ScaleY += e.Delta * 0.001; } } }
转载请注明:于哲的博客 » WPF 图片放大/缩小/拖动