LayoutTransform中的ScaleTransform无效但可与RenderTransform

时间:2015-07-31 13:37:20

标签: c# wpf xaml mvvm wpf-4.0

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

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

问题出在ScaleTransform LayoutTransform

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

ScaleTransform

无法同时实现RotateTransformScrollViewer

我尝试了Canvas

XAML

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

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

画布的旋转行为

- enter image description here

enter image description here

尝试使用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&#39;

建议的解决方案

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>

1 个答案:

答案 0 :(得分:3)

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

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