2014-01-09 50 views
1

縮放圖像後更新了ScrollViewer中的一個大問題。我試着調用方法UpdateLayout,但一切都完好無損。圖像沒有問題縮放,但滾動條保持不變。如何在圖像縮放後更新scrollviewer?

幾個小時,我在堆棧溢出和谷歌尋找不同的解決方案,但沒有我失敗。 XAML:

 <ScrollViewer x:Name="imagescrl" Grid.Row="1" VerticalScrollBarVisibility="Auto" CanContentScroll="True" HorizontalScrollBarVisibility="Auto" > 
      <Image x:Name="imgp" VerticalAlignment="Center" HorizontalAlignment="Center"> 
       <Image.RenderTransform> 
        <TransformGroup> 
         <ScaleTransform ScaleX="0.01" ScaleY="0.01"/> 
         <ScaleTransform x:Name="imgpScale"> 
          <ScaleTransform.ScaleX> 
           <Binding ElementName="sldZoom" Path="Value" Mode="OneWay"/> 
          </ScaleTransform.ScaleX> 
          <ScaleTransform.ScaleY> 
           <Binding ElementName="sldZoom" Path="Value" Mode="OneWay"/> 
          </ScaleTransform.ScaleY> 
         </ScaleTransform> 
        </TransformGroup> 
       </Image.RenderTransform> 
      </Image> 
     </ScrollViewer> 
    ... 
    ... 


      <Slider ValueChanged="Slider_ValueChanged" x:Name="sldZoom" BorderThickness="11,20,0,5" Maximum="250" Minimum="1" Value="100" Width="153"/> 

謝謝

C#:

private void Slider_ValueChanged(object sender,RoutedPropertyChangedEventArgs<double> e) 
    { 
     imagescrl.UpdateLayout(); 
    } 

回答

5

ü要去需要使用

<Image.LayoutTransform> 

,而不是

<Image.RenderTransform> 

,且無需在backendcode

3

Jim's answer事件應該是正確的,但要解釋爲什麼:

RenderTransform在WPF隻影響最終渲染像素到屏幕上。它不會影響WPF認爲的大小 - 如果將變換的內容降低到50%,然後問它是什麼尺寸,它會認爲它的大小相同。這意味着您放入的任何面板/滾動視圖也認爲它是原始大小。

LayoutTransform影響對象的實際大小,因此,如果您LayoutTransform的東西,它會得到它的大小性質改變,所以滾動觀衆應該工作

爲什麼有2種變換?有時你只想影響呈現的輸出並且不改變佈局,並且因爲RenderTransform不改變佈局,所以它應該更快,因爲沒有父視圖將需要重新計算它們的尺寸等。