0

グリッド コントロール内にイメージ コントロールが配置されています。この画像の拡大を有効にするボタンが既にあります。ズームイン後、水平/垂直スクロール バーが表示されます。そして、グリッドに含まれる画像を回転すると、画像とグリッドのスクロールバーがめちゃくちゃになります。イメージ コントロールにズームインと回転の両方を組み込むにはどうすればよいですか? 以下は、私のプロジェクトで使用しているコードです。

私が使用したイメージ コントロール ズームイン コード (x はイメージ コントロール):

if ((x as Image) != null) { x.Height = x.Height * 1.3; x.Width = x.Width * 1.3; } 

使用した回転コード (x はイメージ コントロール):

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 は次のとおりです。

<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>

このトリックを解決するために借りることができる既存のコード スニペットはありますか?

4

3 に答える 3

0

一度に複数の変換を使用するには、 TransformGroupを使用する必要があると思います。

        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;
于 2012-11-29T22:54:30.197 に答える
0

これはあなたのニーズに合うかもしれません:

  <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>

コードビハインド:

  Rotate.Angle = 45;
  Scale = 0.25;
于 2012-11-29T22:56:32.510 に答える
0

Silverlight Toolkit からのと、Toolkit 開発者の 1 人LayoutTransformerからのが不足している可能性があります。AnimationMediator

を使用するLayoutTransformerと、そのコンテンツを画像だけでなく任意のものに設定し、それに任意の変換を適用できます。通常の とは対照的に、RenderTransformレイアウトと実際のサイズに影響します。

同様のシナリオがあり、次のように使用します。

<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 がないため、(Slider コントロールなどから) 変更されたイベントの入力値を手動で処理し、それRotateMediatorに応じてなどの AnimationValues を設定する必要があります。

于 2012-11-30T00:32:47.787 に答える