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

WPF嵌套ListView实现医生名称顶部冻结需求求助

解决方案:固定医生名称,仅患者列表独立滚动

这是个很典型的布局需求,咱们只需要给每个医生的患者列表单独添加滚动容器,就能让医生名称固定在顶部,只让患者列表滚动。下面是修改后的完整XAML代码,我还加了一些提升可读性的布局细节:

<ListView x:Name="DoctorsList" Grid.Column="1" VerticalContentAlignment="Top">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel IsItemsHost="True" />
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <!-- 给每个医生项设置固定宽度,让WrapPanel排列更整齐 -->
            <StackPanel Orientation="Vertical" Width="220" Margin="10">
                <!-- 医生名称放在ScrollViewer外部,实现固定 -->
                <TextBlock Text="{Binding DoctorName}" 
                           HorizontalAlignment="Center"
                           FontWeight="Bold" 
                           FontSize="14"
                           Margin="0 0 0 8"/>
                <!-- 用ScrollViewer包裹患者列表,实现独立滚动 -->
                <ScrollViewer VerticalScrollBarVisibility="Auto" 
                              MaxHeight="320"
                              BorderThickness="1"
                              BorderBrush="#EEE">
                    <!-- 用ItemsControl代替ListView,减少不必要的功能开销 -->
                    <ItemsControl ItemsSource="{Binding AppointmentDetails}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Vertical" Margin="4 2 0 2">
                                    <TextBlock Text="{Binding PatientName}" />
                                </StackPanel>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </ScrollViewer>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

关键修改点说明:

  • 固定医生名称:将医生名称的TextBlock放在ScrollViewer的外部,这样无论患者列表如何滚动,医生名称都会始终显示在每个医生项的顶部。
  • 独立滚动容器:使用ScrollViewer包裹患者列表,设置VerticalScrollBarVisibility="Auto"让滚动条仅在内容超出容器高度时显示,同时通过MaxHeight限制容器最大高度,避免单个医生的患者列表过长破坏整体布局。
  • 优化性能与布局:用ItemsControl替代内层的ListView——如果不需要选择、右键菜单等ListView专属功能,ItemsControl更轻量高效;同时给每个医生项添加固定宽度、内边距,给医生名增加加粗和字号提升,让界面更清晰易读。

如果你的业务场景确实需要保留内层ListView的功能(比如选择患者),只需要把ItemsControl换回ListView,并禁用它自带的滚动功能即可:

<ScrollViewer VerticalScrollBarVisibility="Auto" MaxHeight="320">
    <ListView ItemsSource="{Binding AppointmentDetails}"
              ScrollViewer.VerticalScrollBarVisibility="Disabled">
        <ListView.ItemTemplate>
            <!-- 原患者项模板不变 -->
        </ListView.ItemTemplate>
    </ListView>
</ScrollViewer>

内容的提问来源于stack exchange,提问作者Mathivanan KP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:50:47