首页 > 其他分享 >WPF Image ZoomIn ZoomOut pan

WPF Image ZoomIn ZoomOut pan

时间:2024-05-28 23:35:50浏览次数:20  
标签:sender ZoomOut Image System private Windows using WPF rectangle

<Window x:Class="WpfApp120.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp120"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" 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="/Images/cl1.jpg" />
                    </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="/Images/cl2.jpg" />
                    </VisualBrush.Visual>
                </VisualBrush>
            </Rectangle.Fill>
        </Rectangle>
    </Grid> 
</Window>





using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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;

namespace WpfApp120
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private bool m_IsMouseLeftButtonDown;

        public MainWindow()
        {
            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;
        }
    }
} 

Copy from https://www.cnblogs.com/zhangweijia/articles/2480929.html

标签:sender,ZoomOut,Image,System,private,Windows,using,WPF,rectangle
From: https://www.cnblogs.com/Fred1987/p/18219231

相关文章

  • WPF Path Geometry PathFigureCollection PathFigure PathFigure.Segments PolyQuadra
    <Windowx:Class="WpfApp118.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • WPF DrawingContext DrawingVisual OnRender()
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;......
  • WPF RingShape
    //csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.I......
  • LiT: Zero-shot transfer with locked-image text tuning
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!ProceedingsoftheIEEE/CVFConferenceonComputerVisionandPatternRecognition(CVPR),2022 Abstract 1.Introduction 2.Relatedwork 3.Methods 3.1.Contrastivepre-training 3.2.C......
  • WPF XAML中特殊字符的转义代码
    字符转义字符&&amp;>&gt;<&lt;"&quot;’&apos;{{}{回车&#x000D;或者&#13;换行&#x000A;或者&#10;Tab&#x0009;或者&#9;空格&#x0020;或者&#32;......
  • 记一次 .NET某工控WPF程序被人恶搞的 卡死分析
    一:背景1.讲故事这一期程序故障除了做原理分析,还顺带吐槽一下,熟悉我的朋友都知道我分析dump是免费的,但免费不代表可以滥用我的宝贵时间,我不知道有些人故意恶搞卡死是想干嘛,不得而知,希望后面类似的事情越来越少吧!废话不多说,我们来看看是如何被恶搞的。二:WinDbg分析1.程序是如......
  • WPF Splash Screen – A New Splash Screen Manager (v20.1) 启动页 闪屏页 初始加载
    WPFSplashScreen–ANewSplashScreenManager(v20.1)(devexpress.com)  WPFTeamBlog RSS06July2020A splashscreen isaneffectivewaytoimproveanapp’suserexperienceduringlengthystartupoperations.Unfortunately,creatinganef......
  • WPF 中具有静态属性的数据绑定
    我有一个简单的静态属性FontSizeTitle,它应该用于所有HandledWindow类型实例中的风格化标题,并在更改属性后同时从同一个静态属性更新而无需明确通知。通过设置面板或任何会更改属性的内容,以便直观地更改和更新所有窗口的所有标题的字体大小。这是我在XAML中风格化标题的代码,它......
  • WPF_全局静态变量并且实现变更通知
    WPF_全局静态变量并且实现变更通知当我是开发WPF时可能会出现一个数据在多个页面使用的情况或者获取的数据在工具类里面需要更新到界面上,这时候就可以使用全局静态变量来实现界面的更新.第一步:编写全局静态变量并创建变更通知usingSystem;usingSystem.Collections.Generic;us......
  • WPF开发01-数据绑定的几种方式,静态,动态、向上查找、适应各种情况
    1.前后端简单绑定第一种比较常见,常见于mvvm框架前端<TextBlockText="{BindingPath=Name}"></TextBlock>1后端publicclassPersonViewModel:INotifyPropertyChanged{publicstringName{get{returnname;}set{if(name......