代码之家  ›  专栏  ›  技术社区  ›  Malcolm

滚动查看器未在Silverlight中更新

  •  3
  • Malcolm  · 技术社区  · 15 年前

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

    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 回复  |  直到 15 年前
        1
  •  3
  •   AnthonyWJones    15 年前

    这里的问题是渲染转换发生在渲染过程的后期。迟于测量和安排阶段。滚动查看器根本不知道缩放转换导致的任何明显的大小变化,它仍然认为包含的元素的大小由 Actual 性质。

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