【发布时间】:2017-12-24 01:13:51
【问题描述】:
我可以使用此代码放大我的图像:
var transformGroup = (TransformGroup)image.RenderTransform;
var transform = (ScaleTransform)transformGroup.Children[0];
double zoom = e.Delta > 0 ? ZoomSpeed : -ZoomSpeed;
if (!(transform.ScaleX < minScale) || zoom > 0)
{
transform.ScaleX += zoom;
transform.ScaleY += zoom;
}
它工作得很好,但我希望图像在我滚动时放大鼠标所在的位置。
我尝试复制this answer:
var matTrans = image.RenderTransform as MatrixTransform;
var pos1 = e.GetPosition(image);
var scale = e.Delta > 0 ? ZoomSpeed : -ZoomSpeed;
var mat = matTrans.Matrix;
mat.ScaleAt(scale, scale, pos1.X, pos1.Y);
matTrans.Matrix = mat;
e.Handled = true;
但由于某种原因,我在第一行得到了 NullReferenceException,尽管我可以看到 image 肯定包含来自我的 xaml 窗口的对象。
我非常感谢并在这方面提供帮助 - 我几乎没有执行这种转换的经验。
这是我的 xaml:
<Grid>
<Border Name="border" Margin="10,26,10.4,27.8">
<Image Name="image" Source="{Binding DisplayedImage, Mode=OneWay, IsAsync=True}" Opacity="1" Margin="0,0,-0.4,0.2" />
</Border>
</Grid>
【问题讨论】: