Silverlight 缩放/滚动到光标

Silverlight 缩放/滚动到光标,silverlight,zooming,scrollviewer,Silverlight,Zooming,Scrollviewer,在scrollviewer中放大/缩小图像时出现问题。 当我使用“放大”按钮时,每次单击按钮时,我都会将图像宽度/高度设置为其原始大小的1.25。缩放按钮也是如此,它将比例因子设置为0.75。 到目前为止还不错 问题在于,根据我相对于scrollviewer id中心的单击位置,我希望向单击点滚动。我在此基础上计算一个delta x/y,用于确定x轴和y轴上的滚动方向 double deltaX = (ClickPosition.X - center.X) double deltaY = (Cl

在scrollviewer中放大/缩小图像时出现问题。 当我使用“放大”按钮时,每次单击按钮时,我都会将图像宽度/高度设置为其原始大小的1.25。缩放按钮也是如此,它将比例因子设置为0.75。 到目前为止还不错

问题在于,根据我相对于scrollviewer id中心的单击位置,我希望向单击点滚动。我在此基础上计算一个delta x/y,用于确定x轴和y轴上的滚动方向

double deltaX = (ClickPosition.X - center.X)
double deltaY = (ClickPosition.Y - center.Y)
现在,在将增量应用于垂直和水平滚动条(也使用双动画设置动画)时,我必须考虑图像的当前缩放因子

当我同时缩放和滚动时,最终位置不会达到我预期的位置。图像缩放的原点似乎总是在图像的0,0(左上角),因此我不确定如何处理它,因此单击中心的左侧会比单击中心的右侧产生更强的向左滚动

例子:

资料来源:

在代码中,通过增加图像的宽度和高度来缩放图像。这将始终发生在左上角点附近。但是,如果使用缩放变换,则可以设置图像应围绕其缩放的点

<Image x:Name="img" Margin="151,127,208,142" Source="Waterfall.jpg" Stretch="Fill">
                   <Image.RenderTransform>
                   <ScaleTransform x:Name="imagescale" ScaleX="1.2" ScaleY="1.2" CenterX="100" CenterY="100">
                   </ScaleTransform>
                   </Image.RenderTransform>
                   </Image>

此代码示例取自

这将使您能够通过将ClickPosition绑定到属性来设置ClickPosition的缩放


另一个注意事项:我不确定您是否打算这样缩放,但如果您放大1.25,则应该缩小1/1.25,而不是0.75。这将保持缩放恒定,当您进行缩放时,缩放会发生变化(即,如果我放大两次,缩小两次,我将不再具有1的缩放)。在代码中,您可以通过增加图像的宽度和高度来缩放图像。这将始终发生在左上角点附近。但是,如果使用缩放变换,则可以设置图像应围绕其缩放的点

<Image x:Name="img" Margin="151,127,208,142" Source="Waterfall.jpg" Stretch="Fill">
                   <Image.RenderTransform>
                   <ScaleTransform x:Name="imagescale" ScaleX="1.2" ScaleY="1.2" CenterX="100" CenterY="100">
                   </ScaleTransform>
                   </Image.RenderTransform>
                   </Image>

此代码示例取自

这将使您能够通过将ClickPosition绑定到属性来设置ClickPosition的缩放


另一个注意事项:我不确定您是否打算这样缩放,但如果您放大1.25,则应该缩小1/1.25,而不是0.75。这将使缩放保持不变,您的缩放随着您的移动而改变(即,如果我放大两次,缩小两次,我将不再有1的缩放)。

我查看了您的代码。有没有什么原因可以解释为什么你使用宽度和高度来缩放图像,而不是使用缩放变换?我看了你的代码。是否有任何原因可以解释为什么您使用宽度和高度来缩放图像,而不是使用缩放变换?