我在滚动查看器中有一个图像,我有一个用于缩放图像的控件,在缩放事件中我更改了图像的比例,如下所示:
void zoomSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
scale.ScaleX = e.NewValue;
scale.ScaleY = e.NewValue;
//scroll is a name of scrolviewer
scroll.UpdateLayout();
}
下面有一个xaml
<Grid x:Name="Preview" Grid.Column="1">
<Border x:Name="OuterBorder" BorderThickness="1" BorderBrush="#A3A3A3" >
<Border x:Name="InnerBorder" BorderBrush="Transparent" Margin="2" >
<Grid Background="White" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ScrollViewer x:Name="scroll" HorizontalScrollBarVisibility="Auto" Grid.Column="0" VerticalScrollBarVisibility="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Themes:ThemeManager.StyleKey="TreeScrollViewer">
<Image Source="../charge_chargeline.PNG" >
<Image.RenderTransform>
<CompositeTransform x:Name="**scale**" />
</Image.RenderTransform>
</Image>
</ScrollViewer>
<Border HorizontalAlignment="Center" CornerRadius="0,0,2,2" Width="250" Height="24" VerticalAlignment="Top">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#CDD1D4" Offset="0.0"/>
<GradientStop Color="#C8CACD" Offset="1.0"/>
</LinearGradientBrush>
</Border.Background>
<ChargeEntry:Zoom x:Name="zoominout" />
</Border>
</Grid>
</Border>
</Border>
</Grid>
答案 0 :(得分:3)
这里的问题是渲染变换在渲染过程中发生得更晚。比测量和安排阶段晚。滚动查看器根本不知道由缩放变换引起的任何明显的大小变化,它仍然认为所包含的元素具有Actual
属性指定的大小。
一种解决方案可能是使用LayoutTransform
中的Silverlight Toolkit
对象。这将应用转换作为其布局的一部分,因此其Actual
属性将反映缩放的大小。在ScrollViewer中,滚动条应该按预期运行。