代码之家  ›  专栏  ›  技术社区  ›  Abin

LayoutTransform中的ScaleTransform不工作,但与RenderTransform一起工作

  •  5
  • Abin  · 技术社区  · 9 年前

    我试图在我的申请中做两件事。

    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.旋转图像

    两者都适用 ScaleTransform 渲染转换 但需要它 缩放变换 获得 ScrollViewer

    问题出现在 缩放变换 具有 布局变换

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

    无法同时实现两者 缩放变换 RotateTransform 具有 滚动条

    我试过了 Canvas

    xaml公司

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

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

    画布的旋转行为

    - 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”为我建议的有效解决方案

    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 回复  |  直到 9 年前
        1
  •  4
  •   GazTheDestroyer    9 年前

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

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