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

时间:2012-03-07 18:05:43

标签: c# wpf

是否可以为两个列表框设置一个滚动条,一个放在另一个列表框之上,以便它们像一个列表框一样平滑滚动。 在此先感谢:)

4 个答案:

答案 0 :(得分:1)

您可以将它们叠加在一起,并使它们都自动调整大小,以便它们都没有滚动条。

然后将该装置放在ScrollViewer中。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

注意使用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);
}

答案 3 :(得分:0)

我想你在你的顶级ListBox中设置ScrollViewer.CanContentScroll =“False” - 我遇到了这个问题。