Image 旋转 平移问题

    本章讲述:WPF Image控件旋转和平移问题;
    平移响应函数在Image控件触发,移动图像,位置跳跃性大,移动一下图像就不在显示区域中,不正确,不符合实际的效果。
    解决:Image控件外层添加一层控件比如Border,

<ScrollViewer ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" HorizontalAlignment="Stretch">
    <Viewbox x:Name="imageview" Width="540" Height="540" Stretch="Fill" StretchDirection="Both">
        <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" PreviewMouseLeftButtonDown="MyImage_PreviewMouseLeftButtonDown" PreviewMouseMove="MyImage_PreviewMouseMove" PreviewMouseLeftButtonUp="MyImage_PreviewMouseLeftButtonUp">
            <Image x:Name="MyImage" Width="540" Height="540" Source="/DSViewer;component/Images/p29.png"  HorizontalAlignment="Center" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5" SnapsToDevicePixels="True" Stretch="Fill" >
                <Image.RenderTransform>
                    <TransformGroup>
                        <SkewTransform/>
                        <RotateTransform x:Name="RotateAngle" Angle="{Binding RotateValue ,ElementName=RotateBtn}"/>
                        <TranslateTransform/>
                    </TransformGroup>
                </Image.RenderTransform>
                <Image.Clip>
                    <CombinedGeometry GeometryCombineMode="Intersect">
                        <CombinedGeometry.Geometry1>
                            <RectangleGeometry Rect="0,0,540,540"/>
                        </CombinedGeometry.Geometry1>
                        <CombinedGeometry.Geometry2>
                            <EllipseGeometry Center="270,270" RadiusX="270" RadiusY="270"/>
                        </CombinedGeometry.Geometry2>
                    </CombinedGeometry>
                </Image.Clip>
            </Image>
        </Border>
    </Viewbox>
</ScrollViewer>

C#后端处理代码

Point m_offset = new Point(0, 0);
bool m_isDragging = false;
private void MyImage_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    FrameworkElement el = (FrameworkElement)sender;
    m_offset = e.GetPosition(el);
    m_isDragging = true;
}

private void MyImage_PreviewMouseMove(object sender, MouseEventArgs e)
{
    if (this.ZommBtn.ZoomValue <= 100.0)
        return;
    if (m_isDragging && e.LeftButton == MouseButtonState.Pressed)
    {
        this.imageview.Cursor = Cursors.SizeAll;
        Point p = e.GetPosition((FrameworkElement)sender);
        double x = imageview.Margin.Left + (p.X - m_offset.X);
        double y = imageview.Margin.Top + (p.Y - m_offset.Y);
        if (Math.Abs(x) > 10 || Math.Abs(y) > 10)
        {
            imageview.Margin = new Thickness(x, y, 0, 0);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值