我可以使用以下代码放大我的图像:
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>
答案 0 :(得分:0)
通过在我的问题中结合两个片段,我想出了这个
var transformGroup = (TransformGroup)image.RenderTransform;
var transform = (ScaleTransform)transformGroup.Children[0];
var pos1 = e.GetPosition(image);
double zoom = e.Delta > 0 ? ZoomSpeed : -ZoomSpeed;
if (!(transform.ScaleX < minScale) || zoom > 0)
{
transform.ScaleX += zoom;
transform.ScaleY += zoom;
transform.CenterX = pos1.X;
transform.CenterY = pos1.Y;
}
它完全符合我的需要,它将图像置于当前鼠标位置的中心位置。