常見成因
- XAML 中控件名稱變更:代碼隱藏文件(`.xaml.cs`)仍引用舊 `x:Name`,`FindName` 返回 null。
- 控件未實例化:在 `InitializeComponent()` 前訪問控件,或動態創建控件未加入可視樹。
- DataContext 綁定失敗:綁定源為 null,屬性訪問拋出異常。
- 跨線程訪問 UI:非 UI 線程直接操作控件屬性。
快速定位步驟
- 查看 Visual Studio **錯誤列表** 是否有 XAML 設計器警告(黃三角/紅波浪線)。
- 啟用 **異常設置**:Debug → Windows → Exception Settings → 勾選 `Common Language Runtime Exceptions`,捕獲首次拋出位置。
- 在疑似行打斷點,觀察局部變量 `this`、`sender`、`e` 等是否為 null。
代碼防禦模式
// 安全訪問模式
if (myControl != null) {
myControl.Visibility = Visibility.Visible;
}
// 或使用空條件運算符 (C# 6+)
myControl?.SetValue(Property, value);
C# WPF 空引用異常,XAML 控件名稱不一致,InitializeComponent 前訪問,DataContext 綁定失敗,異常設置斷點定位。