Wpf 应用平移效果的ScaleTransform
我想创建一个缩放控件,可以用鼠标滚轮操作。 向上滚动->放大;向下滚动->缩小Wpf 应用平移效果的ScaleTransform,wpf,vb.net,zooming,Wpf,Vb.net,Zooming,我想创建一个缩放控件,可以用鼠标滚轮操作。 向上滚动->放大;向下滚动->缩小 此外,我希望缩放中心位于鼠标指针所在的位置。这样就可以始终放大鼠标光标所在的位置 看起来很简单,但我却无法工作。 我正在使用网格并对其应用ScaleTransform 当我第一次放大时,它会在那个特定的点上工作并放大。但是,如果我将光标移动到另一个点并尝试放大一点,则网格将偏移,并且我的初始中心将关闭 这是什么原因造成的?如何解决这个问题 我的代码: Class MainWindow Dim trans As Ne
此外,我希望缩放中心位于鼠标指针所在的位置。这样就可以始终放大鼠标光标所在的位置 看起来很简单,但我却无法工作。
我正在使用
网格
并对其应用ScaleTransform
当我第一次放大时,它会在那个特定的点上工作并放大。但是,如果我将光标移动到另一个点并尝试放大一点,则网格将偏移,并且我的初始中心将关闭
这是什么原因造成的?如何解决这个问题
我的代码:
Class MainWindow
Dim trans As New ScaleTransform
Dim Scale As Double = 1
Private Sub DefGrid_MouseWheel(sender As Object, e As MouseWheelEventArgs) Handles DefGrid.MouseWheel
If e.Delta > 0 Then
Scale = Scale + 0.1
End If
If e.Delta < 0 Then
Scale = Scale - 0.1
End If
trans.CenterX = e.GetPosition(DefGrid).X
trans.CenterY = e.GetPosition(DefGrid).Y
trans.ScaleX = Scale
trans.ScaleY = Scale
DefGrid.RenderTransform = trans
End Sub
End Class
Class主窗口
Dim trans作为新的ScaleTransform
双精度暗标度=1
私有子DefGrid_MouseWheel(发送方作为对象,e作为MouseWheelEventArgs)处理DefGrid.MouseWheel
如果e.Delta>0,则
比例=比例+0.1
如果结束
如果e.δ<0,则
比例=比例-0.1
如果结束
trans.CenterX=e.GetPosition(DefGrid).X
trans.CenterY=e.GetPosition(DefGrid).Y
trans.ScaleX=刻度
trans.ScaleY=刻度
DefGrid.RenderTransform=trans
端接头
末级
以及xaml:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" PreviewMouseWheel="Window_PreviewMouseWheel">
<Grid x:Name="DefGrid" HorizontalAlignment="Left" Height="291" Margin="19,10,0,0" VerticalAlignment="Top" Width="475">
<Canvas HorizontalAlignment="Left" Height="254" Margin="137,10,0,0" VerticalAlignment="Top" Width="195">
<Canvas.Background>
<ImageBrush ImageSource="TestImage.jpg"/>
</Canvas.Background>
</Canvas>
</Grid>
</Window>
网格上有一个画布图像,仅供参考。不幸的是,它有点复杂。如果您认为不需要滚动条,请检查此处的答案(我找不到特定于VB的示例,因此这些是C#):
如果您还需要滚动条,则需要滚动到鼠标指针。在这种情况下,您需要以下内容:
你也可以看这里,这几乎正是我想要的结果。除了一个简单的例外,我不需要缩放级别的滚动条。但平移和缩放正是我需要的。好吧,这会很难,因为我从来没有在C#中真正做过任何事情。好吧,我会试着去理解,多亏了我!我选择了第二个链接中的选项。因为在我的原始代码中(不是我在这里发布的示例),我对scrollviewer和grid使用了相同的结构。不管怎样,我仔细地(注释出了试用和错误)分离出了我需要的C代码部分,然后更仔细地重写了所有内容,从C到VB一行一行地重写。最后,它成功了!非常感谢。stsur:我试过了,但Visual Studio 2013在这些示例中出现了一些错误,我不确定如何修复这些错误,因为我真的不太懂C。