2011-08-26 23 views
2

我已經嘗試了很多方法來管理ScrollViewer(Windows Phone 7 Silverlight)中的RenderTransform,但在我看來,現在幾乎是不可能的。我得到的是與ScrollViewer中的大小相匹配的網格,我想通過RenderTransform從代碼更改網格的內容大小,它什麼也不做!我該如何在ScrollViewer(WP7)中執行RenderTransform?

 <ScrollViewer x:Name="scrollViewer" Width="800" Height="480" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible"> 
     <Grid x:Name="grid" Width="1600" Height="960" HorizontalAlignment="Left" VerticalAlignment="Top"> 
      <Grid.RenderTransform> 
       <CompositeTransform x:Name="scaleTransform" ScaleX="1" ScaleY="1"/> 
      </Grid.RenderTransform> 
      <Image x:Name="backgroundImage" Source="/Images/backgrounds/Happy rainbow.png" Stretch="Fill"/> 
     </Grid> 
    </ScrollViewer> 

在代碼:

 private void button_Click(object sender, RoutedEventArgs e) 
    { 
      (grid.RenderTransform as CompositeTransform).CenterX = 0; 
      (grid.RenderTransform as CompositeTransform).CenterY = 0; 
      (grid.RenderTransform as CompositeTransform).ScaleX = 0.5; 
      (grid.RenderTransform as CompositeTransform).ScaleY = 0.5; 
      grid.UpdateLayout(); 
    } 

結合規模和可視狀態做理智最多了。我真的很感謝你的幫助。

+1

你有沒有打算命名你的CompositeTransform * scaleTransform *。爲什麼不直接引用scaleTransform.ScaleX等而不是所有的混亂投射?您可以命名Xaml中的任何元素,並以強類型的方式直接引用它。 –

回答

0

我不知道這是否是你所需要的東西,但如果你插入一個額外的電網這樣的...

  <ScrollViewer Grid.Row="1" x:Name="scrollViewer" 
         Width="800" 
         Height="480" 
         HorizontalScrollBarVisibility="Visible" 
         VerticalScrollBarVisibility="Visible"> 
      <Grid x:Name="grid" 
        HorizontalAlignment="Left" 
        VerticalAlignment="Top"> 
       <Grid 
        Width="1600" 
        Height="960"> 
        <Grid.RenderTransform> 
         <CompositeTransform x:Name="scaleTransform" 
              ScaleX="1" 
              ScaleY="1" /> 
        </Grid.RenderTransform> 
        <Image x:Name="backgroundImage" 
          Source="ApplicationIcon.png" 
          Stretch="Fill" /> 
        </Grid> 
      </Grid> 
     </ScrollViewer> 

至少內容將得到縮放..

1

更好的主意...將您的網格內容放入ItemsControl中,並在ItemsControl上執行ScaleTransform。

<Grid> 
    <ItemsControl x:Name="ContentScaler"> 
     <Image x:Name="backgroundImage" Source="/Images/backgrounds/Happy rainbow.png" Stretch="Fill"/> 
    </ItemsControl> 
</Grid> 

並在代碼隱藏...

ContentScaler.RenderTransform = new ScaleTransform() { ScaleX = 0.5, ScaleY = 0.5, CenterX = 0, CenterY = 0 }; 

根據您可能需要做些什麼,你可能需要做類似設置WrapPanel爲ItemsPanelTemplate和/或調整ItemsControl當你做縮放時。它可能會有點棘手,但希望這會讓你指出正確的方向。

在Silverlight中使用Grid往往會被過度使用,恕我直言,除非需要將事情分解爲表格類型佈局。畫布可能更適合你正在做的事情。

相關問題