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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM