我在缩放图片后更新了ScrollViewer中的一个大问题。我试过调用方法UpdateLayout,但一切都完好无损。图像没有缩放问题,但滚动条保持不变。
几个小时后,我在堆栈溢出和谷歌上寻找不同的解决方案,但没有我失败。 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();
}
答案 0 :(得分:5)
你需要使用
<Image.LayoutTransform>
而不是
<Image.RenderTransform>
并且不需要backendcode中的事件
答案 1 :(得分:3)
Jim's answer应该是正确的,但要解释原因:
WPF中的 RenderTransform
仅影响屏幕上像素的最终渲染。它不会影响WPF认为的大小 - 如果你将变换渲染到50%,然后问它的大小是什么,它会认为它的大小相同。这意味着您放入的任何面板/滚动查看器也会认为它是原始尺寸。
LayoutTransform
会影响对象的实际大小,因此如果你使用LayoutTransform,它会改变它的大小属性,因此滚动查看器应该可以工作
为什么有2种变换?有时您只想影响渲染输出而不更改布局,并且因为RenderTransform
不会更改布局,所以它应该更快,因为没有父视图需要重新计算它们的大小等等