ListView
带分组、搜索框、加载状态以及确认与取消的列表,即 uikit:ListView。
示例可交互
Live demo unavailable
<uikit:ListView Width="280" Height="300" HorizontalAlignment="Left" SelectedItem="Banana">
<uikit:ListSection Header="Fruits" Footer="3 items">
<x:String>Apple</x:String>
<x:String>Banana</x:String>
<x:String>Cherry</x:String>
</uikit:ListSection>
<uikit:ListSection Header="Citrus" Footer="3 items">
<x:String>Lemon</x:String>
<x:String>Orange</x:String>
<x:String>Lime</x:String>
</uikit:ListSection>
<uikit:ListSection Header="Berries" Footer="2 items">
<x:String>Strawberry</x:String>
<x:String>Blueberry</x:String>
</uikit:ListSection>
</uikit:ListView>用法
uikit:ListView 把 列表 做成独立控件,补齐了 ListBox 缺少的能力:分组、搜索框、加载状态以及 List 的选择规则。它的行是 uikit:ListItem,沿用 List 的外观,并置于虚拟化面板中。将条目放入 ItemsSource(或作为子元素),行的内容放入 ItemTemplate。
- 选择。 单击或按 Enter 会选中一行并触发
Confirmed;按 Cmd(macOS)或 Ctrl 时为次级确认(IsSecondary)。上下方向键移动选择,在两端循环,并跳过页眉和页脚。Esc 清除选择并触发Cancelled。SelectedItem与SelectedIndex(由分组和行构成的IndexPath)支持双向绑定;IsSelectable="False"关闭选择但保留悬停效果。 - 右键。 右键按下会用 1px 的选中色边框标记该行,但不选中它;
RightClickedIndex指出是哪一行,可用于上下文菜单。单击任意行或在列表外按下都会清除该标记。 - 禁用行。
DisabledSelector返回某个条目的行是否禁用。 - 滚动。
ScrollToItem(index, strategy)在Center策略下将行居中;其他策略把视野外的行滚动到较近的一端。第一行会滚动到最顶端。 - 加载更多。 设置
HasMore后,滚动到距末尾LoadMoreThreshold行(20)以内会触发LoadMore并设置IsLoadingMore;条目添加完成后请清除该标记。 - 对勾图标。 当行处于
IsConfirmed时,其CheckIcon会显示在行末的 20px 列中;可通过针对uikit|ListItem的样式同时设置两者。
uikit:ListSection(Header、Footer 以及条目)用于构成分组,页眉为 14px 弱化文字,页脚为 12px 弱化文字,如演示所示。若要使用自己的对象,SectionItemsSelector 返回某个分组的条目,SectionHeaderTemplate 与 SectionFooterTemplate 绘制其页眉和页脚。没有条目的分组不会显示。
示例
IsSearchable="True" 会在行上方放置一个搜索框。查询词(SearchText)按条目文字或 SearchFilter 过滤条目,并选中第一个;输入过程中上下方向键与 Enter 仍然可用。
Live demo unavailable
<uikit:ListView Width="280" Height="260" HorizontalAlignment="Left" IsSearchable="True">
<x:String>Apple</x:String>
<x:String>Banana</x:String>
<x:String>Cherry</x:String>
<x:String>Grape</x:String>
<x:String>Lemon</x:String>
<x:String>Mango</x:String>
<x:String>Orange</x:String>
<x:String>Peach</x:String>
<x:String>Pear</x:String>
<x:String>Plum</x:String>
<x:String>Kiwi</x:String>
<x:String>Lime</x:String>
</uikit:ListView>IsLoading="True" 会以三行骨架屏替代原有行。空列表显示 EmptyContent,或 Inbox 图标。
Live demo unavailable
<uikit:ListView Width="280" Height="200" HorizontalAlignment="Left" IsLoading="True" />