2010-04-09 79 views
2

我正在處理輸出大量綁定錯誤的大型WPF應用程序。一個典型的錯誤是這樣的:定位綁定錯誤

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment') 

問題是我不知道這是從哪裏來的應用程序。搜索AncestorType = {x:Type ItemsControl}的整個解決方案並不需要幫助,因爲我仍然不知道哪個結果是罪魁禍首。我試過設置PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.All; 但額外的信息無助於找到有問題的綁定。文件名和行號是我真正需要的。無論如何獲得這些信息?我能想到的唯一的另一個解決方案是將名稱分配給canidates,然後從那裏縮小它的範圍。就此而言,是否有辦法在整個解決方案中爲所有可導出元素自動分配唯一的x:Name?

+0

葉...... WPF問題之一.. – Dani 2010-04-09 18:20:38

回答

1

你什麼時候看到這些綁定錯誤?僅在啓動時(或加載新的AddIn或新視圖等)。

在這些情況下,我發現這些錯誤通常是「誤報」,因爲它們在被綁定的對象被初始化之前被拋出。這很煩人,但是,如果應用程序中的所有內容似乎都被正確綁定(例如,在這裏,您的菜單似乎有適當的Horizo​​ntalContentAlignment),那麼我也不會擔心太多。

+0

我看到很多綁定錯誤。雖然有些可能是「誤報」,但大多數不是(根據我已經做的修正來判斷)。所以,我仍然在尋找對我原來的問題的答案。 – user227389 2010-04-09 20:30:36

3

我通常在實際編寫錯誤消息的代碼上設置一個斷點。當命中斷點時,我使用Visual Studio可視化工具檢查具有綁定錯誤的對象的可視化樹。這幾乎總是告訴我在我的代碼中找到綁定並修復它的確切位置。 (你可以通過安裝一個自定義的跟蹤監聽器並打破它,然後檢查出調用堆棧來找出設置斷點的位置。)

我還設計了我的應用程序,通過確保「誤報」當源出現時,綁定總是有效的。

+0

感謝您的建議,但我已經嘗試過,堆棧跟蹤幾乎是空的: > BindingListener.WriteLine(string message)Line 78 \t C# > [External Code] – user227389 2010-04-12 13:33:07

+1

Aha!我看到你的問題。大部分堆棧跟蹤都是隱藏的,因爲您的Visual Studio安裝被設置爲隱藏堆棧跟蹤中的外部代碼。這將會妨礙您的調試,因爲您無法看到完整的堆棧跟蹤或探索您自己的代碼之外的參數和局部變量。我相信解決這個問題的過程是在工具>選項下的調試選項卡中關閉「啓用只是我的代碼」,然後右鍵單擊堆棧跟蹤並選擇「顯示外部代碼」。 – 2010-04-12 17:16:53

+0

哇,如果你知道如何去做,它會變得多麼容易。這幫助了我很多。我應該只看了一下灰色堆棧跟蹤項目。 – Thorsten79 2011-02-11 16:57:51

0

聽起來像這樣Xceed列選擇錯誤: http://xceed.com/CS/forums/thread/25140.aspx http://xceed.com/CS/forums/ShowThread.aspx?PostID=26315 & PermaPostID = 26029

我有同樣的問題,儘管在這篇文章中提到的解決方法不適合我。也許他們會爲你工作。