Как я могу иметь два вида прокрутки в одном пользовательском элементе управления?

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

Я попытался изменить стековые панели на сетку. Это работает при использовании фиксированной высоты в сетке, но я хочу, чтобы она была масштабируемой.

<Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height = "2*"/>
                    <RowDefinition Height = "1*"/>
                </Grid.RowDefinitions>
                <ScrollViewer Grid.Row = "0">
                    <StackPanel>
                        <TextBlock Grid.Row = "0" Margin = "0 25 0 0" Text = "{x:Static properties:Resources.Sales}" FontSize = "20" FontWeight = "Bold"/>
                        <ListView Grid.Row = "1" FontSize = "18" Height  = "{Binding ActualHeight, ElementName=GridListView}" x:Name = "SalesList" ItemsSource = "{Binding CurrentOccupancy.Sales}" SelectedItem = "{Binding SelectedSale}">

                            <i:Interaction.Behaviors>
                                <behavior:EventToCommandBehavior Command = "{Binding SalesViewSelectionChangedCommand}" Event = "SelectionChanged" PassArguments = "True" />
                            </i:Interaction.Behaviors>
                            <ListView.View>

                                <GridView>
                                    <GridViewColumn Header = "{Binding Source = {x:Static properties:Resources.Paid}, StringFormat=is\{0\}}">
                                        <GridViewColumn.CellTemplate>
                                            <DataTemplate>
                                                <TextBlock x:Name = "paid" Text = "{Binding Paid}"/>
                                                <DataTemplate.Triggers>
                                                    <DataTrigger Binding = "{Binding Paid}" Value = "0">
                                                        <Setter TargetName = "paid" Property = "Text" Value = "{x:Static properties:Resources.Unpaid}" />
                                                    </DataTrigger>
                                                    <DataTrigger Binding = "{Binding Paid}" Value = "1">
                                                        <Setter TargetName = "paid" Property = "Text" Value = "{x:Static properties:Resources.Paid}" />
                                                    </DataTrigger>
                                                </DataTemplate.Triggers>
                                            </DataTemplate>
                                        </GridViewColumn.CellTemplate>
                                    </GridViewColumn>
                                    <GridViewColumn
                            DisplayMemberBinding = "{Binding Product.Name}"
                            Header = "{x:Static properties:Resources.Name}" />
                                    <GridViewColumn
                            DisplayMemberBinding = "{Binding Product.Price}"
                            Header = "{x:Static properties:Resources.Price}" />
                                </GridView>
                            </ListView.View>
                        </ListView>
                    </StackPanel>
                </ScrollViewer>
                <ScrollViewer Grid.Row = "1">
                    <StackPanel>
                        <TextBlock Margin = "0 25 0 0" Grid.Row = "2" Text = "{x:Static properties:Resources.Reservations}" FontSize = "20" FontWeight = "Bold"/>
                        <ListView Grid.Row = "3" FontSize = "18" Height  = "{Binding ActualHeight, ElementName=GridListView}" ItemsSource = "{Binding FutureReservations}" SelectedItem = "{Binding SelectedReservation}">
                            <ListView.View>
                                <GridView>
                                    <GridViewColumn
                            DisplayMemberBinding = "{Binding LastName}"
                            Header = "{x:Static properties:Resources.LastName}"/>
                                    <GridViewColumn
                            DisplayMemberBinding = "{Binding AmountPeople}"
                            Header = "{x:Static properties:Resources.AmountOfPeople}"/>
                                    <GridViewColumn
                            DisplayMemberBinding = "{Binding PhoneNumber}"
                            Header = "{x:Static properties:Resources.Phone}"/>
                                    <GridViewColumn
                            DisplayMemberBinding = "{Binding StartTime, StringFormat=HH:mm dd/MM}"
                            Header = "{x:Static properties:Resources.StartTime}"/>
                                </GridView>
                            </ListView.View>
                        </ListView>
                    </StackPanel>

                </ScrollViewer>
            </Grid>

Я пытаюсь иметь два списка, у которых есть собственная полоса прокрутки, первый список (продажи) должен быть больше второго, а высота не должна быть фиксированной.

Вот как должен выглядеть дизайн: Скриншот дизайнера

Вам действительно нужно прокручивать текстовый блок и заголовки, а также содержимое списка? Внешние средства просмотра прокрутки представляют собой сложность, и я лично предпочел бы, чтобы дизайн пользовательского интерфейса постоянно держал в поле зрения заголовки списка.

Andy 03.05.2019 12:31

Нет, это вовсе не требование, я бы предпочел, чтобы заголовок не прокручивался.

Bram Van den Abbeele 03.05.2019 12:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В ListView есть средство просмотра прокрутки.

Однако размещение списка внутри панели, где он не заканчивается расчетной высотой, вызовет проблемы.

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

Дайте ему два ряда.

Поместите текстовый блок в первый и ваш список во второй.

Вот упрощенная версия вашей разметки, которая иллюстрирует мое предложение.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height = "2*"/>
        <RowDefinition Height = "*"/>
    </Grid.RowDefinitions>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height = "Auto"/>
            <RowDefinition Height = "*"/>
        </Grid.RowDefinitions>
        <TextBlock Text = "First List"/>
        <ListView ItemsSource = "{Binding Letters}" Grid.Row = "1"/>
    </Grid>
    <Grid Grid.Row = "1">
        <Grid.RowDefinitions>
            <RowDefinition Height = "Auto"/>
            <RowDefinition Height = "*"/>
        </Grid.RowDefinitions>
        <TextBlock Text = "Second List"/>
        <ListView ItemsSource = "{Binding Letters}" Grid.Row = "1"/>
    </Grid>
</Grid>

Текстовые блоки и заголовки списков останутся видимыми, а вертикальные полосы прокрутки появятся для содержимого каждого списка, если они не подходят.

Очевидно, что у меня нет заголовков в этой версии.

Другие вопросы по теме