# Transfer 自定义样式指南 Transfer 的视觉表现通过 `ControlTheme` + Design Token 系统控制。以下介绍几种常见的自定义方式。 --- ## 1. 通过属性直接控制 最简单的自定义方式是通过 Transfer 的公共属性控制外观和行为: ### 自定义面板尺寸 ```xml ``` ### 自定义面板标题 ```xml ``` ### 自定义穿梭按钮文本 ```xml ``` ### 验证状态 ```xml ``` > 📖 完整示例参考:`controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/TransferShowCase.axaml` --- ## 2. 自定义列表项渲染 通过 `ItemTemplate` 自定义列表项的展示方式: ```xml ``` > 📖 参考:Gallery 中 "Advanced" 示例。 --- ## 3. 自定义页脚 通过 `SourceViewFooter` / `TargetViewFooter` 在面板底部添加自定义内容: ```xml Left button reload Right button reload ``` --- ## 4. 搜索过滤 启用搜索过滤后面板头部下方会显示搜索框: ```xml ``` 其中 `FilterValueSelector` 是一个委托,用于从数据项中提取需要过滤的值: ```csharp // 在 ViewModel 中 public DefaultFilterValueSelector TransferFilterValueSelector => item => { if (item is SearchCaseItemData data) { return data.Content; } return item; }; ``` --- ## 5. 自定义树形穿梭视图 通过 `SourceView` 可以自定义树的展示行为: ```xml ``` --- ## 6. 通过 Style 覆盖样式 可以在 AXAML 中使用 `Style` 对 Transfer 相关控件进行样式覆盖: ### 全局样式 ```xml ``` ### 覆盖面板装饰器样式 ```xml ``` --- ## 样式选择器速查 > 说明:Avalonia 样式选择器中使用 `atom|ListTransfer` 语法引用 `atom` XML 命名空间下的类型,`|` 是命名空间分隔符。 ### Transfer 类型选择器 | 选择器 | 说明 | |---|---| | `atom\|ListTransfer` | 匹配所有列表穿梭框 | | `atom\|TreeTransfer` | 匹配所有树形穿梭框 | | `:is(atom\|AbstractTransfer)` | 匹配所有穿梭框(包含列表和树) | | `:is(atom\|AbstractTransfer):disabled` | 匹配禁用状态的穿梭框 | ### 状态选择器 | 选择器 | 说明 | |---|---| | `atom\|TransferItemDecorator[Status=Error]` | Error 状态(红色边框) | | `atom\|TransferItemDecorator[Status=Warning]` | Warning 状态(黄色边框) | ### 布局模式选择器 | 选择器 | 说明 | |---|---| | `:is(atom\|AbstractTransfer)[IsStretchView=True]` | 拉伸模式 | | `:is(atom\|AbstractTransfer)[IsStretchView=False]` | 固定宽度模式 | | `:is(atom\|AbstractTransfer)[IsPaginationEnabled=True]` | 分页模式(宽度自动使用 `ListWidthLG`) | ### 面板装饰器选择器 | 选择器 | 说明 | |---|---| | `atom\|TransferItemDecorator` | 面板装饰器 | | `atom\|TransferItemDecorator[ViewType=Source]` | 源面板 | | `atom\|TransferItemDecorator[ViewType=Target]` | 目标面板 | | `atom\|TransferItemDecorator[IsOneWay=True]` | 单向模式面板 | ### 模板部件选择器 | 选择器 | 说明 | |---|---| | `:is(atom\|AbstractTransfer) /template/ Grid#RootLayout` | 根布局 Grid | | `:is(atom\|AbstractTransfer) /template/ StackPanel#ActionsLayout` | 穿梭按钮区域 | | `atom\|TransferItemDecorator /template/ Border#Frame` | 面板主框架 | | `atom\|TransferItemDecorator /template/ Border#HeaderFrame` | 面板头部 | | `atom\|TransferItemDecorator /template/ DockPanel#HeaderLayout` | 头部布局 | | `atom\|TransferItemDecorator /template/ atom\|CheckBox#SelectAllCheckBox` | 全选复选框 | | `atom\|TransferItemDecorator /template/ atom\|LineEdit#FilterInput` | 搜索输入框 | | `atom\|TransferItemDecorator /template/ Border#FooterFrame` | 页脚区域 | | `atom\|TransferItemDecorator /template/ ContentPresenter#ContentPresenter` | 视图内容区域 |