两个列表框,一个在另一个上面,有一个滚动条

本文关键字:另一个 滚动条 有一个 一个 两个 列表 | 更新日期: 2023-09-27 18:27:08

是否可以为两个列表框设置一个滚动条,一个放在另一个的顶部,以便它们像一个列表框一样平滑滚动。提前感谢:)

两个列表框,一个在另一个上面,有一个滚动条

我不太清楚你的问题,但我相信你可以使用这样的东西:

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

您可以将它们堆叠在一起,并使两者都自动调整大小,这样两者都没有滚动条。

然后把这个装置放在ScrollViewer中。

我不能100%确定AutoSize/No Scrollbar是否是std ListBox的一个选项,但您应该可以使用ItemsPanel。

如果我理解您的意图,下面的代码示例应该会有所帮助。

注意UIHelpers.FindVisualChild(…)的使用此方法的代码可以通过搜索"wpf FindVisualChild"在线找到。此外,垂直偏移的计算(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);
}

我认为你应该在你的顶部ListBox中设置ScrollViewer.CanContentScroll="False"-我遇到了这个问题。