Как разместить ScrollViewer сверху содержания, оно должно прокрутить

В то время как mocking является жизнеспособным вариантом, вы можете также рассмотреть возможность тестирования e2e с выделенной учетной записью aws, найти несколько примеров, в том числе DynamodB и шлюз API

lambda_e2e

9
задан Patrick Klug 30 January 2009 в 06:42
поделиться

3 ответа

Я думаю, что теперь понимаю то, под чем Вы подразумеваете "на вершине" - один способ сделать это состоит в том, чтобы использовать шаблон управления, который заставляет ScrollContentPresenter охватить две строки и столбцы сетки, в то время как ScrollBars находятся в 2-х строках и столбцах. ScrollBars установлены быть полупрозрачными. Содержание теперь потянет под полосами прокрутки!

Стиль, который я попробовал, который работает, следующие:

<Style x:Key="SVStyle" TargetType="{x:Type ScrollViewer}">
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollViewer}">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <ScrollContentPresenter Grid.ColumnSpan="2" Grid.RowSpan="2"/>
                        <ScrollBar Name="PART_VerticalScrollBar"
                            HorizontalAlignment="Right"
                            Opacity="0.5" 
                            Grid.Column="1"
                            Value="{TemplateBinding VerticalOffset}"
                            Maximum="{TemplateBinding ScrollableHeight}"
                            ViewportSize="{TemplateBinding ViewportHeight}"
                            Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" />
                        <ScrollBar Name="PART_HorizontalScrollBar"
                            VerticalAlignment="Bottom"
                            Orientation="Horizontal"
                            Opacity="0.5"
                            Grid.Row="1"
                            Value="{TemplateBinding HorizontalOffset}"
                            Maximum="{TemplateBinding ScrollableWidth}"
                            ViewportSize="{TemplateBinding ViewportWidth}"
                            Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Использование в качестве примера:

<ScrollViewer HorizontalScrollBarVisibility="Auto" Style="{StaticResource SVStyle}" >
    <StackPanel>
        <Button Height="100" Width="800" >Hello World</Button>
        <Button Height="100" Width="800" >Hello World</Button>
        <Button Height="100" Width="800" >Hello World</Button>
        <Button Height="100" Width="800" >Hello World</Button>
        <Button Height="100" Width="800" >Hello World</Button>
        <Button Height="100" Width="800" >World World</Button>
        <Button Height="100" Width="800" >Hello World</Button>
        <Button Height="100" Width="800" >Hello World</Button>
    </StackPanel>
</ScrollViewer>

Результат вроде этого:

fancy transparent scrolling

Это было бы просто, изменяют это так, чтобы ScrollBars были первоначально очень прозрачны (скажите, Непрозрачность = 0.2), и сделайте, чтобы они стали более непрозрачными, когда мышь вводит ScrollBar. Это было бы хорошим эффектом и сохранит ScrollBars путем, пока они не необходимы.

Править:

Я описал это на своем блоге для тех, кто хотел бы немного больше детали.

15
ответ дан 4 December 2019 в 12:22
поделиться

Идея состоит в том, что ScrollViewer является декоратором для вещи, которую он прокручивает и отсекает. Прокручиваемая вещь полностью не знает о прокрутке. Это просто и изящно - почему это не достаточно в Вашем случае?

Однако если ScrollViewer не делает то, что Вы хотите, я предлагаю, чтобы Вы создали средства управления ScrollBar и обработали события, сгенерированные им, переместив содержание, что Вы хотите прокрутить в конечном счете обработчики. Можно даже смочь сделать некоторую необычную привязку данных, чтобы не писать обработчики событий. Я не уверен, как Вы собираетесь отсечь содержание правильно, но это - новая куча проблем.

При необходимости к расположению в одном управлении сверху другого используйте управление холстом.

1
ответ дан 4 December 2019 в 12:22
поделиться

Я не уверен, хотите ли Вы поместить, полоса прокрутки scrollviewer сверху содержания - раз так отвечают 1, если Вы хотите целый scrollViewer ontop содержания, см. ответ 2.

1) Можно изменить визуальное представление чего-либо в WPF путем применения шаблона. Прием в этом случае должен найти то, что существующее представление ScrollViewer, и затем по существу повторно реализуйте весь одинаковый зрительный ряд просто changeing позиция ScrollBar как требуется. Существует несколько способов найти весь зрительный ряд для управления - самое легкое от Образцов MSDN WPF - и достаточно приятно пример ScrollViewer, обеспеченный шоу Microsoft, как сменить положение полосы прокрутки.

Microsoft BTW склонна загружать их примеры большим количеством дополнительных Xaml, в которых Вы действительно не нуждаетесь - игра (безжалостно отключенный код) с шаблоном, пока она не делает, что Вы хотите и не больше.

2) Мой подход к размещению ontop представления прокрутки содержания, должен был бы использовать два scrollviewers, помещенные друг на друге. 'Вершина' является маленькой, полупрозрачной (непрозрачность = 50) и прокрутка дескрипторов, нижняя часть является более крупной и имеет документ. Соедините событие прокрутки проводом от лучшего ScrollViewer так, чтобы это также прокрутило нижнюю часть один.

1
ответ дан 4 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

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