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 模板結構:

ScrollViewer 內僅包含 ItemsPresenter(資料列)。HeaderPresenter(表頭)置於 ScrollViewer 的 ControlTemplate 內部,並非 ScrollViewer.Content。
若將 Header 置於 Content 內,垂直捲動時 Header 會跟隨捲動消失,這比水平捲軸缺失更嚴重。因此 WPF 將 Header 固定在 Template 層,犧牲了「無資料時 Header 觸發水平捲動」的邊界情況。
需實作 Selective Scrolling(WPF Toolkit 提供),使垂直捲動僅影響 Items,水平捲動同時作用於 Header 與 Items。完整實作複雜,後續文章將深入探討。
DataGrid 替代(內建正確處理)。