XAML: заставьте ScrollViewer показать полосы прокрутки, когда ScaleTransform дочернего объекта станет крупным

Я делаю своего рода управление "предварительным просмотром" для некоторых документов в моем приложении Silverlight 3. У меня есть Холст (для предъявления документа) в ScrollViewer, и у меня есть увеличение / уменьшение кнопок, которые управляют свойствами X and Y Scale ScaleTransform для Холста. Свойство RenderTransform. Я хочу, чтобы полосы прокрутки ScrollViewer обнаружились, когда я "увеличиваю масштаб" достаточно таким образом, что холст больше не видим в области ScrollViewer, но кажется, что они только обнаруживаются в зависимости от Ширины/Высоты самого Холста, независимо от того, увеличено ли это или нет.

Кто-либо может помочь?

6
задан Todd Main 18 March 2010 в 07:03
поделиться

1 ответ

Да, проблема в том, что в Silverlight нет LayoutTransform . Некоторые обходные пути этой проблемы перечислены здесь .

Идея состоит в том, чтобы предоставить промежуточный холст, размер которого изменяется и, как результат, изменяется размер прокручиваемой области. Например, если у меня есть следующий XAML:

<Grid x:Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition Height="200" />
        <RowDefinition Height="25" />
    </Grid.RowDefinitions>
        <ScrollViewer Grid.Row="0" x:Name="sc" VerticalScrollBarVisibility="Auto" 
                      HorizontalScrollBarVisibility="Auto" Width="200" Height="200" >
        <Canvas x:Name="sizer" Width="200" Height="200">
            <Rectangle x:Name="gradientRect" Width="200" Height="200">
            <Rectangle.RenderTransform>
                <ScaleTransform ScaleX="1" ScaleY="1"/>
            </Rectangle.RenderTransform>
                <Rectangle.Fill>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                        <GradientStop Color="Red" Offset="0.1"/>
                        <GradientStop Color="Yellow" Offset="0.5"/>
                        <GradientStop Color="Red" Offset="0.9"/>
                    </LinearGradientBrush>
                </Rectangle.Fill>
            </Rectangle>
        </Canvas>
    </ScrollViewer>
    <Button Grid.Row="1" Content="Multiply by Two" Click="ScaleRect" Width="100" Height="25"></Button>
</Grid>

Вы заметите, что я поместил между и и событие щелчка ScaleRect в

9
ответ дан 10 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: