zoukankan      html  css  js  c++  java
  • wpf 图片缩放

    根据鼠标滚轮缩放图片及拖动(可查看UCLeaveAndOverBlock)

    以下是根据网上一些代码调整测试后的代码
    xaml
    <Image x:Name="imgUpload" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5,0,0,0" Grid.Row="3" Grid.Column="1"
    Source="{Binding UploadImage, Converter={StaticResource byteAndImageSourceConverter},UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
    RenderOptions.ClearTypeHint="Enabled" RenderOptions.BitmapScalingMode="HighQuality" SnapsToDevicePixels="True"
    UseLayoutRounding="True"
    MouseDown="img_MouseDown"
    MouseWheel="img_MouseWheel"
    MouseMove="img_MouseMove"
    MouseUp="img_MouseUp"
    MouseLeave="img_MouseLeave"
    >
    <Image.RenderTransform>
    <TransformGroup>
    <ScaleTransform x:Name="sfr" />
    <TranslateTransform x:Name="tlt" />
    </TransformGroup>
    </Image.RenderTransform>
    </Image>

    后台cs
    #region 根据鼠标滚轮缩放图片及拖动
    private bool isMouseLeftButtonDown = false;
    Point previousMousePoint = new Point(0, 0);
    private void img_MouseDown(object sender, MouseButtonEventArgs e)
    {
    isMouseLeftButtonDown = true;
    previousMousePoint = e.GetPosition(imgUpload);
    }

    private void img_MouseUp(object sender, MouseButtonEventArgs e)
    {
    isMouseLeftButtonDown = false;
    }

    private void img_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
    {
    isMouseLeftButtonDown = false;

    }

    private void img_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
    {
    if (isMouseLeftButtonDown == true)
    {
    Point position = e.GetPosition(imgUpload);
    tlt.X += position.X - this.previousMousePoint.X;
    tlt.Y += position.Y - this.previousMousePoint.Y;
    }
    }
    private void img_MouseWheel(object sender, MouseWheelEventArgs e)
    {
    Point centerPoint = e.GetPosition(imgUpload);

    double val = (double)e.Delta / 20; //描述鼠标滑轮滚动
    if (sfr.ScaleX < 0.3 && sfr.ScaleY < 0.3 && e.Delta < 0)
    {
    return;
    }
    if (e.Delta < -6)
    {
    tlt.X = 0;
    tlt.Y = 0;
    }
    sfr.CenterX = centerPoint.X;
    sfr.CenterY = centerPoint.Y;
    sfr.ScaleX += val;
    sfr.ScaleY += val;
    }
    #endregion

    小知识点:

    要想让滚动条显示出来除了设置滚动条先关属性外还要设置固定的宽高

    //该样式应用于所有类型控件
    <Style TargetType="{x:Type Control}"/>


    C#代码中的Contain方法,例如 A =‘2/11/12’ B = '1' C='2'
    A.Contain(B) = false;A.Contain(C) = true
    (注意到了吗?是分割后进行的对比,不同于sql中的like字符)

  • 相关阅读:
    Invalid bound statement (not found): com.**.demo.mapper.User_infoMapper
    IDEA 常用快捷键
    springboot 将项目打包成jar包
    .netcore A circular dependency was detected for the service of type '****'.
    C# 枚举 高级战术
    C#高性能动态获取对象属性值
    使用github actions检测网站是否在线
    纸壳CMS分布式部署集群解决方案
    System.Data.DataRow[] 如何转换为 DataTable
    JavaDoc生成文档
  • 原文地址:https://www.cnblogs.com/mamaxiaoling/p/11439140.html
Copyright © 2011-2022 走看看