Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 应用平移效果的ScaleTransform_Wpf_Vb.net_Zooming - Fatal编程技术网

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。