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字符)

原文地址:https://www.cnblogs.com/mamaxiaoling/p/11439140.html