首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Silverlight中旋转StackPanel或网格中的图像

问如何在Silverlight中旋转StackPanel或网格中的图像
EN

Stack Overflow用户
提问于 2012-11-30 06:43:28
回答 3查看 1.2K关注 0票数 0

我有一个位于Grid控件中的图像控件。我已经有一个按钮可以放大这张图片了。放大后,将显示水平/垂直滚动条。然后我旋转包含网格的图像,图像和网格滚动条被弄乱了。我应该如何合并图像控件的放大和旋转?以下是我在项目中使用的代码。

我使用的图像控件放大代码(x是图像控件):

代码语言:javascript
复制
if ((x as Image) != null) { x.Height = x.Height * 1.3; x.Width = x.Width * 1.3; } 

我使用的旋转代码(x是图像控件):

代码语言:javascript
复制
if ((x as Image) != null)
{    
    RotateTransform rotate = new RotateTransform(); rotate.Angle = rotateAngle;
    rotate.CenterX = x.Width / 2;
    rotate.CenterY = x.Height / 2;
    x.RenderTransform = rotate;                                       
};

XAML是:

代码语言:javascript
复制
<ScrollViewer x:Name="scrollViewer" Height="480" Width="615"
                    VerticalScrollBarVisibility="Auto"
                    HorizontalScrollBarVisibility="Auto">
  <ScrollViewer.Content>
      <Grid x:Name="ImageGrid">
          <StackPanel x:Name="ImageStackPanel">
              <Image Source="..." VerticalAlignment="Center"  Width="220" Height="170" ></Image>  
          </StackPanel>
      </Grid>
  </ScrollViewer.Content>
</ScrollViewer>

谁有什么现成的代码片段可以借给我用来解决这个问题?

EN

回答 3

Stack Overflow用户

发布于 2012-11-30 06:54:30

我认为您需要使用TransformGroup来同时使用多个转换:

代码语言:javascript
复制
        ScaleTransform myScaleTransform = new ScaleTransform();
        myScaleTransform.ScaleY = 3;

        RotateTransform myRotateTransform = new RotateTransform();
        myRotateTransform.Angle = 45;

        // Create a TransformGroup to contain the transforms 
        // and add the transforms to it.
        TransformGroup myTransformGroup = new TransformGroup();
        myTransformGroup.Children.Add(myScaleTransform);
        myTransformGroup.Children.Add(myRotateTransform);

        // Associate the transforms to the image.
        x.RenderTransform = myTransformGroup;
票数 0
EN

Stack Overflow用户

发布于 2012-11-30 06:56:33

这可能会满足您的需求:

代码语言:javascript
复制
  <Image x:Name="image" Source="myImageSource" Stretch="Uniform" 
               HorizontalAlignment="Center" VerticalAlignment="Center" 
               RenderTransformOrigin="0.5, 0.5">
                 <Image.RenderTransform>
                     <TransformGroup>
                         <RotateTransform x:Name="Rotate"/>
                         <ScaleTransform x:Name="Scale" />
                     </TransformGroup>
                 </Image.RenderTransform>
  </Image>

代码隐藏:

代码语言:javascript
复制
  Rotate.Angle = 45;
  Scale = 0.25;
票数 0
EN

Stack Overflow用户

发布于 2012-11-30 08:32:48

您可能缺少来自Silverlight Toolkit的LayoutTransformer和来自one of the Toolkit developers的AnimationMediator。

使用LayoutTransformer,您可以将其内容设置为任何内容,而不仅仅是图像,并对其应用任何转换,并且与通常的RenderTransform相反,它将影响布局和实际大小。

我有一个类似的场景,我是这样使用的:

代码语言:javascript
复制
<Grid>
    <fs:AnimationMediator x:Name="RotateMediator" LayoutTransformer="{Binding ElementName=LayoutTransformer}" AnimationValue="{Binding Angle, ElementName=RotateTransform, Mode=TwoWay}" />
    <fs:AnimationMediator x:Name="ScaleXMediator" LayoutTransformer="{Binding ElementName=LayoutTransformer}" AnimationValue="{Binding ScaleX, ElementName=ScaleTransform, Mode=TwoWay}" />
    <fs:AnimationMediator x:Name="ScaleYMediator" LayoutTransformer="{Binding ElementName=LayoutTransformer}" AnimationValue="{Binding ScaleY, ElementName=ScaleTransform, Mode=TwoWay}" />

    <tkt:LayoutTransformer x:Name="LayoutTransformer" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <tkt:LayoutTransformer.LayoutTransform>
            <TransformGroup>
                <RotateTransform x:Name="RotateTransform" />
                <ScaleTransform x:Name="ScaleTransform" />
            </TransformGroup>
        </tkt:LayoutTransformer.LayoutTransform>

        <Image x:Name="MyImage" Source="mysource.png" Width="600" Height="800" />

    </tkt:LayoutTransformer>
</Grid>

由于缺少MultiBinding,您可能还需要手动处理输入值(来自滑块控件等)、更改的事件,然后相应地设置RotateMediator的AnimationValues等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13636119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档