如何仅通过XAML创建带分组与展开器的ListView(无需数据绑定)
纯XAML实现ListView分组(无数据绑定)
你之前的代码错误在于将GroupItem和BlockControl平级放入ListView.Items,ListView会把它们都当作独立列表项,无法形成分组关系。以下是纯XAML实现分组的正确写法,完全基于硬编码内容,适合原型演示:
<ListView xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:YourNamespace"> <!-- 替换为你的local命名空间 --> <!-- 定义分组标题的样式 --> <ListView.GroupStyle> <GroupStyle> <GroupStyle.HeaderTemplate> <DataTemplate> <TextBlock Text="{Binding Header}" FontWeight="Bold" FontSize="14" Margin="0,10,0,5" Foreground="#2c3e50"/> </DataTemplate> </GroupStyle.HeaderTemplate> <!-- 可选:设置分组内项的布局 --> <GroupStyle.Panel> <ItemsPanelTemplate> <StackPanel Orientation="Vertical"/> </ItemsPanelTemplate> </GroupStyle.Panel> </GroupStyle> </ListView.GroupStyle> <!-- 第一个分组:In/Out --> <GroupItem Header="In/Out"> <ItemsControl> <local:BlockControl Inputs="0" Outputs="1" FunctionName="I" ToolTip="Digital Input"/> <local:BlockControl Inputs="0" Outputs="1" FunctionName="AI" ToolTip="Analog Input"/> <local:BlockControl Inputs="1" Outputs="1" FunctionName="Q" ToolTip="Digital Output"/> <local:BlockControl Inputs="1" Outputs="1" FunctionName="AQ" ToolTip="Analog Output"/> </ItemsControl> </GroupItem> <!-- 第二个分组:Constants --> <GroupItem Header="Constants"> <ItemsControl> <local:BlockControl Inputs="0" Outputs="1" FunctionName="0" ToolTip="Digital 0"/> <local:BlockControl Inputs="0" Outputs="1" FunctionName="1" ToolTip="Digital 1"/> </ItemsControl> </GroupItem> <!-- 第三个分组:Local variables --> <GroupItem Header="Local variables"> <ItemsControl> <local:BlockControl Inputs="1" Outputs="1" FunctionName="AM" ToolTip="Analog Marker"/> <local:BlockControl Inputs="1" Outputs="1" FunctionName="M" ToolTip="Digital Marker"/> <local:BlockControl Inputs="1" Outputs="1" FunctionName="AM" ToolTip="Analog Marker"/> </ItemsControl> </GroupItem> <!-- 第四个分组:Network variables --> <GroupItem Header="Network variables"> <ItemsControl> <local:BlockControl Inputs="0" Outputs="1" FunctionName="NI" ToolTip="Network Digital Input"/> <local:BlockControl Inputs="0" Outputs="1" FunctionName="NAI" ToolTip="Network Analog Input"/> <local:BlockControl Inputs="1" Outputs="1" FunctionName="NQ" ToolTip="Network Digital Output"/> <local:BlockControl Inputs="1" Outputs="1" FunctionName="NAQ" ToolTip="Network Analog Output"/> </ItemsControl> </GroupItem> </ListView>
关键说明:
- GroupStyle:指定分组标题的渲染模板,这里用加粗文本显示分组名称,通过Margin调整间距增强视觉分层。
- GroupItem:每个分组的容器,
Header属性设置分组名称,内部用ItemsControl包裹该分组下的所有BlockControl,确保子项属于当前分组。 - ItemsControl:作为分组内子项的容器,默认采用垂直堆叠布局,你可以通过修改
ItemsPanel改为水平排列或流式布局(比如WrapPanel)。
内容的提问来源于stack exchange,提问作者Kamil
相关产品推荐
相关产品推荐

