2012-11-29 56 views
0

我有一個圖像控件位於網格控件內。我已經有了一個按鈕來放大這張圖片。放大後,顯示水平/垂直滾動條。然後我旋轉包含網格的圖像,圖像和網格滾動條都搞亂了。我應該如何結合放大和旋轉圖像控制?以下是我在我的項目中使用的代碼。如何在Silverlight中的StackPanel或Grid中旋轉圖像

我使用的圖像控制放大代碼(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> 

有沒有人有任何現有的代碼片段,我可以借用來解決這個詭計?

+0

你可以發佈你的XAML嗎? –

回答

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; 
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; 
+0

謝謝,但我的圖像控件沒有LayoutTransform屬性。你在使用WPF還是Silverlight?我正在使用Silverlight。 – lwconquer

+0

對不起,我以爲Silverlight會有LayoutTransform:( –

+0

更新了可能的silverlight解決方案 –

0

您可能會錯過Silverlight ToolkitLayoutTransformer,而AnimationMediatorone of the Toolkit developers

使用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的你可能還需要手動處理的輸入值(從滑塊控制等)的變化和事件然後相應地設置RotateMediator等的AnimationValues。