Expander是Avalonia中用于折叠/展开的轻量控件,核心用法包括基础声明(含Header/Content及ExpandDirection)、数据绑定管理IsExpanded状态以避免滚动丢失、样式定制(ToggleButton/HeaderTemplate/ContentPresenter),并支持手风琴效果。

Expander 是 Avalonia 中一个实用的折叠/展开控件,适合用于隐藏次要内容、节省界面空间。它结构简单但可定制性强,用法核心就三点:基础声明、数据绑定控制状态、样式自定义外观。
基础用法:声明与结构
Expander 默认包含 Header(标题区)和 Content(内容区),两者都支持任意 XAML 内容:
- Header 可放 TextBlock、StackPanel,甚至带图标的按钮
- Content 区域可嵌入 Grid、ListBox、UserControl 等复杂布局
- 默认展开方向是向下;可通过 ExpandDirection="Up" 改为向上展开
示例:
状态管理:避免滚动丢失的关键
在 ListBox 或 ItemsControl 中大量使用 Expander 时,常见问题是“一滚动就自动收起”——这其实是 VirtualizingStackPanel 回收控件导致的。根本解法不是禁用虚拟化,而是把 IsExpanded 状态绑定到 ViewModel 属性:
- ViewModel 中定义 bool 属性,如 IsDetailExpanded
- XAML 中绑定:IsExpanded="{Binding IsDetailExpanded}"
- 这样状态随数据走,滚动重用也不会丢
不推荐写死 IsExpanded="True" 或仅靠事件处理,否则列表滚动后行为不可控。
样式定制:改外观不改逻辑
Expander 样式通过 Style Selector="Expander" 定义,通常放在 Resources 中。重点可调整三部分:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~