LayoutTransform中的ScaleTransform不起作用,但可与RenderTransform一起使用

Abi*_*hew 5 c# wpf xaml mvvm wpf-4.0

我正在尝试在我的应用程序中做两件事。

1.缩放图像

能够与RenderTransform。但需要实现LayoutTransform才能启用Scrollviewer

a

工作。

 <Image.RenderTransform>
      <ScaleTransform ScaleX="{Binding ScaleX}" ScaleY="{Binding ScaleY}" />
 </Image.RenderTransform>
Run Code Online (Sandbox Code Playgroud)

无法运作

<Image.LayoutTransform>
     <ScaleTransform ScaleX="{Binding ScaleX}" ScaleY="{Binding ScaleY}" />
</Image.LayoutTransform>
Run Code Online (Sandbox Code Playgroud)

2.旋转图像

既工作ScaleTransformRenderTransform,但需要它ScaleTransform来获得ScrollViewer

问题是,在ScaleTransformLayoutTransform

<Image.LayoutTransform>
    <TransformGroup> 
       <ScaleTransform ScaleX="{Binding ScaleX}" ScaleY="{Binding ScaleY}" />
       <RotateTransform Angle="{Binding RotateAngle}"/>
    </TransformGroup>
</Image.LayoutTransform>
Run Code Online (Sandbox Code Playgroud)

不能太兼顾ScaleTransformRotateTransformScrollViewer

我尝试过 Canvas

a

<Canvas.LayoutTransform>
   <TransformGroup> 
      <ScaleTransform ScaleX="{Binding ScaleX}" ScaleY="{Binding ScaleY}" />
      <RotateTransform Angle="{Binding RotateAngle}"/>
   </TransformGroup>
</Canvas.LayoutTransform>
Run Code Online (Sandbox Code Playgroud)

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

画布的旋转行为

--在此处输入图片说明

在此处输入图片说明

尝试与 ViewBox

ScrollViewer Zoom不能正常旋转。

完整代码如下

<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>
Run Code Online (Sandbox Code Playgroud)

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

“ 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>
Run Code Online (Sandbox Code Playgroud)

Gaz*_*yer 5

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

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