首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF Bug 清單 (13):ListView 無項目時 Header 超寬不顯示水平捲軸

     編輯:關於.NET

現象描述

ListView 內容超出寬度時應自動顯示水平捲軸。但當 ListView 無任何 Item,且 GridView Header 總寬度超過控制項寬度 時,水平捲軸不會出現。

最小重現代碼

<Grid x:Name="LayoutRoot">
  <ListView Width="100">
    <ListView.View>
      <GridView>
        <GridViewColumn Header="Name"/>
        <GridViewColumn Header="Value"/>
        <GridViewColumn Header="Length"/>
        <GridViewColumn Header="Format"/>
        <GridViewColumn Header="Error Information"/>
      </GridView>
    </ListView.View>
  </ListView>
</Grid>

無水平捲軸截圖

根因分析

透過 Snoop/Visual Tree 分析 ListView 模板結構:

ListView Template 結構

  • ScrollViewer 內僅包含 ItemsPresenter(資料列)。
  • HeaderPresenter(表頭)置於 ScrollViewer 的 ControlTemplate 內部,並非 ScrollViewer.Content。

HeaderPresenter 位置

設計權衡

若將 Header 置於 Content 內,垂直捲動時 Header 會跟隨捲動消失,這比水平捲軸缺失更嚴重。因此 WPF 將 Header 固定在 Template 層,犧牲了「無資料時 Header 觸發水平捲動」的邊界情況。

解決方案展望

需實作 Selective Scrolling(WPF Toolkit 提供),使垂直捲動僅影響 Items,水平捲動同時作用於 Header 與 Items。完整實作複雜,後續文章將深入探討。

暫時規避

  • 預先插入一筆空白/隱藏資料列,確保 ItemsPresenter 存在。
  • 或以 DataGrid 替代(內建正確處理)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved