两个列表框,一个在另一个上面,有一个滚动条
本文关键字:另一个 滚动条 有一个 一个 两个 列表 | 更新日期: 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"-我遇到了这个问题。