2013-02-12 31 views
5

我正在處理VS 2012 Express WPF項目(C#代碼隱藏),並且出現錯誤「在屬性表達式中檢測到循環」。在我繼續之前,我知道爲什麼我會得到它 - 我只是不知道該怎麼做,或者甚至需要處理,因爲即使它顯示在錯誤列表中,並且以藍色下劃線,程序編譯並運行得很好。我已經谷歌搜索這個當然結果已經變化。我的問題是兩個舞伴,但首先,這裏的破敗:在屬性表達式中檢測到循環

違規代碼:

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}"> 
<!-- setter properties --> 
</Style> 

正如你所看到的,它是按鈕式的,指的按鈕,這是什麼原因造成的問題。第一個解決方法我讀參與分離,像這樣的代碼:

<Style x:Key="ButtonStyleToApply" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}"> 
    <!-- setter properties --> 
</Style> 
<!-- and in another style dictionary, --> 
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonStyleToApply}"/> 

...,然後將兩個樣式集進入不同的字典。顯然,這也沒有任何好處 - VS仍然嗅出我在做什麼,但它仍然編譯並運行良好。現在這裏還有另一種解決方法:

「Visual Studio中的XAML設計器發生了一些架構變化,這已經使這種情況有所緩解。我們將努力改進這種體驗,但現在您可以通過以下方法解決此問題:沒有定義應用程序對象(App.xaml)中的資源,而是在本地文檔(MainPage.xaml)中定義它們「

這是張貼在技術支持查詢Here中。 (Connect.Microsoft.Com)

但我相信每個人的經驗。我的同行代碼可以告訴我什麼?我的問題是雙方的問題。 1.如果程序正在編譯,我是否甚至需要打擾該解決方法? 2.如果我很好走,有沒有辦法告訴VS忽略它?我知道忽略它,或者VS可能被認爲是「壞習慣」,但除此之外......?

+0

只是供參考:請不要在標題中包含標籤名稱;該軟件爲您照顧這一點。見:http://meta.stackexchange.com/questions/130242/using-tags-in-question-titles – 2013-02-12 21:45:37

+0

理解,謝謝:) – 2013-02-12 22:01:00

回答

12

您使用的語法沒有問題;定義基於現有隱式樣式的隱式樣式是合法的。您提供的代碼示例在VS 2010中適用於我,沒有任何投訴,但在VS2012中產生了有問題的錯誤。

既然它在兩個版本中都編譯並運行良好,我懷疑問題在於VS 2012 XAML設計器支持。這對你來說有多大的一筆交易取決於你爲WPF視圖依賴多少設計器渲染。 (例如,我通常隱藏呈現的視圖並僅在XAML視圖中工作。)如果您確實使用了該功能,則可能會注意到並非所有屬性都在設計時被正確設置。當然,由於設置者通常在運行時間之前通常不會產生太多影響,所以您可能永遠不會注意到這種差異。

而且,正如你的問題正確指出的那樣,即使微軟已經將此視爲VS2012中的一次迴歸,這強烈暗示他們不希望發生錯誤,並且可能會在未來的某個時刻修復設計師錯誤。

+0

這絕對是我想聽到的。謝謝你的幫助。 – 2013-02-12 22:02:15