Два списка, один поверх другого с одной полосой прокрутки - PullRequest
1 голос
/ 07 марта 2012

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

Ответы [ 4 ]

1 голос
/ 07 марта 2012

Ваш вопрос мне не совсем понятен, но я считаю, что вы можете использовать что-то вроде этого:

<ScrollViewer Height="50">
    <StackPanel>
        <ListBox>
            <ListBoxItem  Content="00 -Item0"/>
            <ListBoxItem  Content="00 -Item1"/>
            <ListBoxItem  Content="00 -Item2"/>
        </ListBox>
        <ListBox>
            <ListBoxItem  Content="01 -Item0"/>
            <ListBoxItem  Content="01 -Item1"/>
            <ListBoxItem  Content="01 -Item2"/>
        </ListBox>
    </StackPanel>
</ScrollViewer>
1 голос
/ 07 марта 2012

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

Затем поместите эту штуковину в ScrollViewer.

Я не уверен на 100%, является ли опция AutoSize / No Scrollbar опцией для std ListBox, но вы должны иметь возможность использовать ItemsPanel.

0 голосов
/ 07 марта 2012

Я думаю, что вы должны установить ScrollViewer.CanContentScroll = "False" в вашем верхнем ListBox - у меня была именно эта проблема.

0 голосов
/ 07 марта 2012

Приведенный ниже пример кода должен помочь, если я понимаю ваше намерение.

Обратите внимание на использование UIHelpers.FindVisualChild (...) код этого метода можно найти в Интернете, выполнив поиск по запросу «wpfFindVisualChild».Также вычисление вертикального смещения (e.NewValue * 10), кажется, работает хорошо, но значение 10 было получено из нескольких тестов.Возможно, вы сможете рассчитать лучшее значение или вывести его как-нибудь получше.

<Grid >
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <StackPanel Orientation="Vertical" Grid.Row="0" Grid.Column="0">
        <ListBox Name="ListBox1"  Height="50" Width="100" ScrollViewer.VerticalScrollBarVisibility="Hidden">
            <ListBoxItem  Content="Item0"/>
            <ListBoxItem  Content="Item1"/>
            <ListBoxItem  Content="Item2"/>
            <ListBoxItem  Content="Item3"/>
            <ListBoxItem  Content="Item4"/>
            <ListBoxItem  Content="Item5"/>
            <ListBoxItem  Content="Item6"/>
            <ListBoxItem  Content="Item7"/>
            <ListBoxItem  Content="Item8"/>
            <ListBoxItem  Content="Item9"/>
        </ListBox>
        <ListBox Name="ListBox2" Height="50" Width="100" ScrollViewer.VerticalScrollBarVisibility="Hidden">
            <ListBoxItem  Content="Item0"/>
            <ListBoxItem  Content="Item1"/>
            <ListBoxItem  Content="Item2"/>
            <ListBoxItem  Content="Item3"/>
            <ListBoxItem  Content="Item4"/>
            <ListBoxItem  Content="Item5"/>
            <ListBoxItem  Content="Item6"/>
            <ListBoxItem  Content="Item7"/>
            <ListBoxItem  Content="Item8"/>
            <ListBoxItem  Content="Item9"/>
        </ListBox>
    </StackPanel>
    <ScrollBar Scroll="HandleScollChangeScrollBar" Height="100" Grid.Row="0" Grid.Column="1"/>
</Grid>

private void HandleScollChangeScrollBar(object sender, System.Windows.Controls.Primitives.ScrollEventArgs e)
{
    ScrollViewer scrollViewer1 = UIHelpers.FindVisualChild<ScrollViewer>(ListBox2);
    scrollViewer1.ScrollToVerticalOffset(e.NewValue * 10);

    ScrollViewer scrollViewer2 = UIHelpers.FindVisualChild<ScrollViewer>(ListBox1);
    scrollViewer2.ScrollToVerticalOffset(e.NewValue * 10);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...