滚动查看器未在silverlight中更新

时间:2010-06-12 10:09:21

标签: c# silverlight

我在滚动查看器中有一个图像,我有一个用于缩放图像的控件,在缩放事件中我更改了图像的比例,如下所示:

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>

1 个答案:

答案 0 :(得分:3)

这里的问题是渲染变换在渲染过程中发生得更晚。比测量和安排阶段晚。滚动查看器根本不知道由缩放变换引起的任何明显的大小变化,它仍然认为所包含的元素具有Actual属性指定的大小。

一种解决方案可能是使用LayoutTransform中的Silverlight Toolkit对象。这将应用转换作为其布局的一部分,因此其Actual属性将反映缩放的大小。在ScrollViewer中,滚动条应该按预期运行。