我正在尝试使用滑块来控制放大和缩小任何图像。
我写了一段代码:
private void image1_MouseMove(object sender, MouseEventArgs e)
{
if (!image1.IsMouseCaptured) return;
var tt = (TranslateTransform)((TransformGroup)
image1.RenderTransform).Children.First(tr => tr is TranslateTransform);
Vector v = start - e.GetPosition(border1);
tt.X = origin.X - v.X;
tt.Y = origin.Y - v.Y;
}在这里,它工作得很好。使用鼠标滚动。但我想使用滑块来实现同样的功能。
但不能像使用滑块的鼠标滚动一样放置相同的行为。我非常新的WPF和它的控制,所以任何细节上的帮助是高度感谢。
如何使用滑块实现与放大-缩小相同的功能?
发布于 2012-07-09 21:37:38
经过大量的研究和编码后,我发现它是一个非常简单的应用程序,也非常简单的编码,放大和缩小图像使用滑块。你需要做的就是在你选择的区域放置一个滑块。然后放入下面的代码。
private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
TransformGroup transformGroup = (TransformGroup)image1.RenderTransform;
ScaleTransform transform = (ScaleTransform)transformGroup.Children[0];
double zoom = e.NewValue;
transform.ScaleX = zoom;
transform.ScaleY = zoom;
}现在我已经有了代码,这样图像就可以使用鼠标滚轮进行放大和放大。
private void image1_MouseWheel(object sender, MouseWheelEventArgs e)
{
TransformGroup transformGroup = (TransformGroup)image1.RenderTransform;
ScaleTransform transform = (ScaleTransform)transformGroup.Children[0];
double zoom = e.Delta > 0 ? .2 : -.2;
transform.ScaleX += zoom;
transform.ScaleY += zoom;
slider1.Value += zoom;
}现在,当你把
slider1.value += zoom;然后,鼠标滚轮中的更改和滑块中的更改更改图片的缩放。
记住鼠标滚轮和滑块在实现上的区别。在鼠标滚轮中,MouseWheelEventsArgs "e“和e.Delte的值是正值和负值取决于鼠标滚轮的向上或向下。但在滑块中,RoutedPropertyChangesEventsArgs的值是正的或负的,取决于上下倾斜的程度。您不需要在此处指定。只是
zoom = e.NewValue;我希望它能有所帮助。
发布于 2012-06-22 21:25:33
你必须在你的代码中编写一个ScaleTransform。这是我的代码的一部分,我不会把所有的东西都放进去,但它是你的基础。
对于滑块,必须将Zoom属性绑定到滑块的值。
private double m_dCurZoom = 1.0;
private ScaleTransform m_transZoom;
public ScaleTransform TransZoom
{
get { return m_transZoom; }
}
private TranslateTransform m_transPan;
public double Zoom
{
get { return m_dCurZoom; }
set
{
double oldzoom = m_dCurZoom;
if (m_dCurZoom != value)
{
m_dCurZoom = value;
OnPropertyChanged("Zoom");
UpdateZoom(oldzoom);
}
}
}
public void UpdateZoom(double oldzoom)
{
// Are we visible?
if (m_root == null)
return;
// Get parent
FrameworkElement parent = GetRootParent();
if (parent == null)
return;
// Center point of the window
Point ptCenter = new Point(parent.RenderSize.Width / 2, parent.RenderSize.Height / 2);
// Translate into canvas coordinates
ptCenter = m_root.TranslatePoint(ptCenter, m_canvas);
// Update the zoom
m_transZoom.ScaleX = m_dCurZoom;
m_transZoom.ScaleY = m_dCurZoom;
m_transPan.X -= ptCenter.X * m_dCurZoom - ptCenter.X * oldzoom;
m_transPan.Y -= ptCenter.Y * m_dCurZoom - ptCenter.Y * oldzoom;
ResizeElementContents();
OnPropertyChanged("Zoom");
}https://stackoverflow.com/questions/11155959
复制相似问题