如何在ScrollViewer(WP7)中执行RenderTransform?

时间:2011-08-26 05:47:21

标签: c# silverlight xaml windows-phone-7

我已经尝试过很多方法来管理ScrollViewer(Windows Phone 7 Silverlight)中的RenderTransform,但现在我觉得几乎不可能。我得到的是Grid在ScrollViewer中的大小,我希望通过RenderTransform从代码中改变网格的内容大小,它什么都不做!

      <ScrollViewer x:Name="scrollViewer" Width="800" Height="480" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible">
        <Grid x:Name="grid" Width="1600" Height="960" HorizontalAlignment="Left" VerticalAlignment="Top">
            <Grid.RenderTransform>
                <CompositeTransform x:Name="scaleTransform" ScaleX="1" ScaleY="1"/>
            </Grid.RenderTransform>
            <Image x:Name="backgroundImage" Source="/Images/backgrounds/Happy rainbow.png" Stretch="Fill"/>
        </Grid>
    </ScrollViewer>

在代码中:

        private void button_Click(object sender, RoutedEventArgs e)
    {
            (grid.RenderTransform as CompositeTransform ).CenterX = 0;
            (grid.RenderTransform as CompositeTransform ).CenterY = 0;
            (grid.RenderTransform as CompositeTransform ).ScaleX = 0.5;
            (grid.RenderTransform as CompositeTransform ).ScaleY = 0.5;
            grid.UpdateLayout();
    }

在比例和视觉状态上的绑定也不高。我真的很感激你的帮助。

2 个答案:

答案 0 :(得分:1)

更好的想法...将您的网格内容放入ItemsControl,并在ItemsControl上执行ScaleTransform。

<Grid>
    <ItemsControl x:Name="ContentScaler">
        <Image x:Name="backgroundImage" Source="/Images/backgrounds/Happy rainbow.png" Stretch="Fill"/>
    </ItemsControl>
</Grid>

在代码隐藏中......

ContentScaler.RenderTransform = new ScaleTransform() { ScaleX = 0.5, ScaleY = 0.5, CenterX = 0, CenterY = 0 };

根据您可能需要做的其他事情,您可能需要做一些事情,例如将WrapPanel设置为ItemsPanelTemplate和/或在进行缩放时调整ItemsControl的大小。它可能会有点棘手,但希望这会让你指向正确的方向。

在Silverlight中使用Grid往往有点过度使用,恕我直言,除非需要将事物分解为表格类型布局。 Canvas可能更适合你正在做的事情。

答案 1 :(得分:0)

我不确定这是否正是您所需要的,但如果您插入这样的额外网格......

            <ScrollViewer Grid.Row="1" x:Name="scrollViewer"
                      Width="800"
                      Height="480"
                      HorizontalScrollBarVisibility="Visible"
                      VerticalScrollBarVisibility="Visible">
            <Grid x:Name="grid"
                  HorizontalAlignment="Left"
                  VerticalAlignment="Top">
                <Grid
                    Width="1600"
                    Height="960">
                    <Grid.RenderTransform>
                        <CompositeTransform x:Name="scaleTransform"
                                            ScaleX="1"
                                            ScaleY="1" />
                    </Grid.RenderTransform>
                    <Image x:Name="backgroundImage"
                           Source="ApplicationIcon.png"
                           Stretch="Fill" />
                    </Grid>
            </Grid>
        </ScrollViewer>

至少内容会缩放..