Как я могу выполнить RenderTransform в ScrollViewer (WP7)? - PullRequest
2 голосов
/ 26 августа 2011

Я пробовал много способов управления RenderTransform в ScrollViewer (Windows Phone 7 Silverlight), но сейчас мне это кажется почти невозможным. Я получил 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 ]

1 голос
/ 26 августа 2011

Лучшая идея ... поместить содержимое Grid в ItemsControl и выполнить ScaleTransform для ItemsControl.

<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 при выполнении масштабирования. Это может быть немного сложно, но, надеюсь, это укажет вам правильное направление.

Использование Grid в Silverlight также имеет тенденцию к чрезмерному использованию, ИМХО, если только не нужно разбивать элементы на макеты таблиц. Холст лучше подходит для того, что вы делаете.

0 голосов
/ 26 августа 2011

Я не уверен, что это именно то, что вам нужно, но если вы вставите дополнительную сетку, подобную этой ...

            <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>

по крайней мере, содержимое будет масштабироваться ..

...