在 Avalonia 中实现 ListBox 水平滚动,需同时满足三个条件:1. 设置 ItemsPanel 为水平 StackPanel 或 WrapPanel;2. 用 ScrollViewer 外层包裹并设 HorizontalScrollBarVisibility="Auto"、VerticalScrollBarVisibility="Disabled";3. 确保内容总宽度超出 ScrollViewer 可视区域。

在 Avalonia 中,ListBox 默认是垂直滚动的,若要实现**水平滚动**,关键不是直接给 ListBox 设置水平滚动,而是通过嵌套 ScrollViewer 并控制其滚动方向,同时调整 ItemsPanel 为水平布局(如 StackPanel 或 WrapPanel 横向排列)。
默认 ListBox 使用垂直 StackPanel,需显式替换为水平方向:
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<!-- ItemTemplate 和 ItemsSource 略 -->
</ListBox>ListBox 本身不直接暴露 HorizontalScrollBarVisibility 属性,需用 ScrollViewer 显式包裹,并设置其行为:
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</ScrollViewer>注意:
- VerticalScrollBarVisibility="Disabled" 防止出现双滚动条;
- HorizontalScrollBarVisibility 可设为 Auto、Visible 或 Hidden;
- ScrollViewer 必须放在 ListBox 外层(不能放 inside ControlTemplate 除非重写模板)。
若希望内容自动换行或限制宽度,可用 WrapPanel 替代 StackPanel,并设置 ItemWidth 或容器约束:
WrapPanel + Orientation="Horizontal" 实现“横向优先、自动折行”ListBoxItem 设置固定 Width 或使用 MaxWidth 防止撑开ScrollViewer 宽度受限(如父容器有固定宽或 HorizontalAlignment="Stretch")以下细节容易被忽略,但直接影响效果:
ListBox 默认有内边距和项间距,可能干扰滚动范围 —— 检查 Padding 和 ItemContainerStyle 中的 Margin
ScrollViewer 可视区域(可临时加 Background="Red" 查看实际尺寸)ScrollViewer.CanHorizontallyScroll 绑定,但通常无需手动设,由内容自动判断ControlTemplate 时,确保模板中保留 ScrollViewer 且正确命名 PART_ScrollViewer不复杂但容易忽略的是:必须同时满足「水平布局」+「外层 ScrollViewer」+「内容超宽」三个条件,缺一不可。直接在 ListBox 上设 ScrollBarVisibility 是无效的。
以上就是Avalonia怎么在ListBox中实现水平滚动 Avalonia ScrollViewer设置的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号