LayoutTransform 中的 ScaleTransform 不起作用,但适用于 RenderTransform

ScaleTransform in LayoutTransform not working but works with RenderTransform

我想在我的申请中做两件事。

1。缩放图像

可以RenderTransform。但需要在 LayoutTransform 中实现才能启用 Scrollviewer.

xaml

正在工作。

 <Image.RenderTransform>
      <ScaleTransform ScaleX="{Binding ScaleX}" ScaleY="{Binding ScaleY}" />
 </Image.RenderTransform>

不工作

<Image.LayoutTransform>
     <ScaleTransform ScaleX="{Binding ScaleX}" ScaleY="{Binding ScaleY}" />
</Image.LayoutTransform>

2。旋转图像

适用于 ScaleTransformRenderTransform 但需要它与 ScaleTransform 一起获得 ScrollViewer

问题出在 ScaleTransformLayoutTransform

<Image.LayoutTransform>
    <TransformGroup> 
       <ScaleTransform ScaleX="{Binding ScaleX}" ScaleY="{Binding ScaleY}" />
       <RotateTransform Angle="{Binding RotateAngle}"/>
    </TransformGroup>
</Image.LayoutTransform>

无法通过 ScrollViewer

同时实现 ScaleTransformRotateTransform

我试过 Canvas

xaml

<Canvas.LayoutTransform>
   <TransformGroup> 
      <ScaleTransform ScaleX="{Binding ScaleX}" ScaleY="{Binding ScaleY}" />
      <RotateTransform Angle="{Binding RotateAngle}"/>
   </TransformGroup>
</Canvas.LayoutTransform>

旋转的不同行为但能够实现这两种功能但ScrollViewer不滚动。

canvas

的旋转行为

-

尝试对ViewBox

做同样的事情

旋转适用于 ScrollViewer 缩放无效。

完整代码如下

<ScrollViewer>
    <Viewbox  RenderTransformOrigin="0.5,0.5" Height="Auto" Width="Auto" ScrollViewer.CanContentScroll="True">
         <Viewbox.LayoutTransform>
                <TransformGroup> 
                    <ScaleTransform ScaleX="{Binding ScaleX}" ScaleY="{Binding ScaleY}" />
                    <RotateTransform Angle="{Binding RotateAngle}"/>
                </TransformGroup>
            </Viewbox.LayoutTransform>
        <Image RenderTransformOrigin="0.5,0.5" >               
            <Image.Source>                    
                <BitmapImage UriSource="{Binding ImagePath}" ScrollViewer.CanContentScroll="True"></BitmapImage>
            </Image.Source>
        </Image>
    </Viewbox>
 </ScrollViewer>

任何人都可以帮助我提出建议。

'GazTheDestroyer'

为我建议的有效解决方案

XAML

<Image RenderTransformOrigin="0.5,0.5" Stretch="None" >
            <Image.LayoutTransform>
                <TransformGroup>
                  <ScaleTransform ScaleX="{Binding ScaleX}" ScaleY="{Binding ScaleY}" />
                  <RotateTransform Angle="{Binding RotateAngle}"/>
               </TransformGroup>
           </Image.LayoutTransform>
         <Image.Source>                    
           <BitmapImage UriSource="{Binding ImagePath}" ScrollViewer.CanContentScroll="True"></BitmapImage>
         </Image.Source>
 </Image>

尝试将 Stretch="None" 添加到您的 Image 标签,否则无法提供明确的高度和宽度。

在某些面板中,WPF 会自动将图像拉伸到面板中可用的 space,这会使您的缩放变换在布局过程中变得多余。