柚子快報激活碼778899分享:WPF 控件的縮放和移動
柚子快報激活碼778899分享:WPF 控件的縮放和移動
WPF 控件的縮放和移動
1.頁面代碼
x:Name="viewbox" MouseDown="viewbox_MouseDown" MouseMove="viewbox_MouseMove" MouseWheel="Viewbox_MouseWheel">
ScaleTransform 用于進行縮放
TranslateTransform 用于進行位置的移動
ViewBox中可以放入不同的控件不光可以是圖片
ContentControl 可以對超過容器的部分進行剪切,這樣就不會覆蓋到其他控件了
2.后臺代碼
public partial class ImageSuper : UserControl
{
public ImageSuper()
{
InitializeComponent();
}
public ImageSource ImageSource
{
get { return (ImageSource)GetValue(ImageSourceProperty); }
set { SetValue(ImageSourceProperty, value); }
}
public static readonly DependencyProperty ImageSourceProperty =
DependencyProperty.Register("ImageSource", typeof(ImageSource), typeof(ImageSuper), null);
public double Scale
{
get { return (double)GetValue(ScaleProperty); }
set { SetValue(ScaleProperty, value); }
}
public static readonly DependencyProperty ScaleProperty =
DependencyProperty.Register("Scale", typeof(double), typeof(ImageSuper),
new PropertyMetadata(default(double), new PropertyChangedCallback(ScalePropertyChanged)));
public double TranserX
{
get { return (double)GetValue(TranserXProperty); }
set { SetValue(TranserXProperty, value); }
}
public static readonly DependencyProperty TranserXProperty =
DependencyProperty.Register("TranserX", typeof(double), typeof(ImageSuper),
new PropertyMetadata(default(double), new PropertyChangedCallback(TranserPropertyChanged)));
public double TranserY
{
get { return (double)GetValue(TranserYProperty); }
set { SetValue(TranserYProperty, value); }
}
public static readonly DependencyProperty TranserYProperty =
DependencyProperty.Register("TranserY", typeof(double), typeof(ImageSuper),
new PropertyMetadata(default(double), new PropertyChangedCallback(TranserPropertyChanged)));
public static void ScalePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
(d as ImageSuper).DoScale();
}
public static void TranserPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
(d as ImageSuper).DoMove();
}
///
/// 縮放圖片。最小為0.1倍,最大為0倍
///
private void DoScale()
{
// 限制最大、最小縮放倍數(shù)
if (scaler.ScaleX + Scale < 0.1 || scaler.ScaleX + Scale > 80) return;
scaler.ScaleX = Scale;
scaler.ScaleY = Scale;
}
///
/// 移動圖片
///
private void DoMove()
{
transer.X = TranserX;
transer.Y = TranserY;
}
private void Viewbox_MouseWheel(object sender, MouseWheelEventArgs e)
{
var point = e.GetPosition(viewbox);
var delta = e.Delta * 0.002;
Scale += delta;
TranserX -= point.X * delta;
TranserY -= point.Y * delta;
}
private Point lastMousePosition;
private void viewbox_MouseDown(object sender, MouseButtonEventArgs e)
{
Point currentMousePosition = e.GetPosition(image);
lastMousePosition = currentMousePosition;
}
private void viewbox_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
// 獲取鼠標(biāo)相對于圖片的位置
Point currentMousePosition = e.GetPosition(image);
// 獲取鼠標(biāo)在X軸和Y軸上的移動距離
double deltaX = currentMousePosition.X - lastMousePosition.X;
double deltaY = currentMousePosition.Y - lastMousePosition.Y;
TranserX += deltaX / 10;
TranserY += deltaY / 10;
}
}
}
3.總結(jié)
目前這個是直接做成了第三方控件的樣式使用的,還有一個旋轉(zhuǎn)的屬性但是因為項目不需要所有就沒有加進去.還有一個自適應(yīng)大小的功能就是把Scale 的值改為1,TranserX 和TranserY 的值改為0就可以了.
2023/11/20
柚子快報激活碼778899分享:WPF 控件的縮放和移動
推薦閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。