【问题标题】:Rotating image on button click WPF在按钮单击 WPF 时旋转图像
【发布时间】:2013-05-01 04:35:32
【问题描述】:

我已在我的 WPF 用户控件的画布上包含图像:

<Canvas>
 <Thumb Canvas.Left="19" Canvas.Top="-7" Canvas.ZIndex="99"  DragDelta="Thumb_DragDelta">
 <Thumb.Template>
       <ControlTemplate>
           <Image Name="Image1" Source="/Images/Image1.png" Height="120" Width="242" Margin="63,180,696,393" />
        </ControlTemplate>
 </Thumb.Template>
 </Thumb>
 <Thumb Canvas.Left="52" Canvas.Top="6" DragDelta="Thumb_DragDelta">
 <Thumb.Template>
        <ControlTemplate>
         <Image Name="Image2" Source="/Images/Image2.png" Height="120" Width="205" Margin="760,184,74,397" />
        </ControlTemplate>
  </Thumb.Template>
  </Thumb>
  <Thumb Canvas.Left="21" DragDelta="Thumb_DragDelta" Canvas.Top="-18">
  <Thumb.Template>
        <ControlTemplate>
             <Image Name="Image3" Source="/Images/Image3.png" Height="124" Width="260" Margin="82,426,697,151" />
        </ControlTemplate>
   </Thumb.Template>
   </Thumb>
   <Thumb Canvas.Left="30" Canvas.Top="1" DragDelta="Thumb_DragDelta">
   <Thumb.Template>
        <ControlTemplate>
        <Image Name="Image4" Source="/Images/Image4.png" Height="124" Width="255" Margin="744,341,39,236" />
        </ControlTemplate>
   </Thumb.Template>
   </Thumb>
</Canvas>

然后我在后面的代码中包含以下内容,以便这些拇指图像可以在屏幕上移动,效果很好。

// Move images on canvas
    private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
    {
        UIElement thumb = e.Source as UIElement;

        Canvas.SetLeft(thumb, Canvas.GetLeft(thumb) + e.HorizontalChange);
        Canvas.SetTop(thumb, Canvas.GetTop(thumb) + e.VerticalChange);
    }

有谁知道快速添加,我可以用画布上的拇指添加到此代码中,以便我可以选择在不同方向和不同角度单击按钮时旋转这些图像?

谢谢

【问题讨论】:

标签: c# wpf wpf-controls rotatetransform


【解决方案1】:

您可以将 RotateTransform 分配给 Thumbs 的 RenderTransform 属性,并在事件处理程序中修改 RotateTransform 的 Angle

<Thumb Canvas.Left="52" Canvas.Top="7" RenderTransformOrigin="0.5,0.5"
       DragDelta="Thumb_DragDelta" MouseDoubleClick="Thumb_MouseDoubleClick">
    <Thumb.RenderTransform>
        <RotateTransform/>
    </Thumb.RenderTransform>
    <Thumb.Template>
        ...
    </Thumb.Template>
</Thumb>

事件处理程序可能如下所示:

private void Thumb_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    var thumb = e.Source as UIElement;
    var transform = thumb.RenderTransform as RotateTransform;
    transform.Angle += 90;
}

但是,您应该更改拇指上较大的 Margin 值,因为它们会影响旋转中心。

【讨论】:

  • 感谢您的建议克莱门斯,它围绕我的用户控件中心旋转拇指,你知道我如何编辑它以围绕图像本身的中心旋转。感谢您到目前为止的帮助:)
  • 这就是我改变大边距的意思。但是,您可以删除 RenderTransformOrigin 并使用 RotateTransform 的 CenterX 和 CenterY 属性。
  • 好的,没问题,我现在知道了。谢谢你的帮助:)
【解决方案2】:
  Canvas container = new Canvas();
  container.Children.Add(image);
  container.Arrange(new Rect(0, 0, source.PixelWidth, source.PixelHeight));

  // render the result to a new bitmap. 
  RenderTargetBitmap target = new RenderTargetBitmap(targetWidth, targetHeight,       sourceDpiX, sourceDpiY, PixelFormats.Default);
  target.Render(container);

RenderTargetBitmap 可以在任何控件中使用它来代替 BitmapSource。

【讨论】:

  • 很好,但这根本不能回答 OP 的问题。
  • 这个可以添加到按钮点击事件中
  • 我不确定你的意思。这将如何让我旋转图像?代码不起作用 - 表示大多数变量在当前上下文中不存在。
  • 旋转在哪里?这个答案没有意义。
  • 这正是你必须要做的,只是你不需要绑定 RenderTransform 属性。只需分配一个 RotateTransform。
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
相关资源
最近更新 更多