You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:03:36