2012-01-18 65 views
2

我正在使用XAML編寫Metro應用程序& C#。我在Win7中開始使用WPF。我創建了一個從UserControl繼承的基類,然後嘗試將它放到我的XAML中。Windows 8中的基本用戶控件類XAML Metro App

在Windows 7中,這個偉大的工作:

<MyType:AnImplementation 
... 
xmlns:MyType="clr-namespace:MyAppNamespace" 
/> 

我試着在Win8中同樣的事情,但不幸的是,我得到的錯誤 -

<MyType:AnImplementation 
... 
xmlns:MyType="using:MyAppNamespace" 
/> 

現在生產這樣的: CompileXaml任務意外失敗。然後是一個空引用異常。

我不是WPF高手,所以我可能會做這完全錯了 - 我最近剛剛開始進入它,但我無法隔離這個問題。這是某種雞/雞蛋問題,還是有不同的方式來在Win8 XAML中構建自定義用戶控件?

編輯:我認爲它可能有助於更清晰。我在創建用戶控件時遇到了麻煩,我無法創建屬於我自己的基類型的usercontrols,該類型繼承自UserControl。例如:

基類,我們會打電話給MyBaseType,從用戶控件繼承,並有一定的虛方法:

public class MyBaseType : UserControl 
{ 
    public MyBaseType() : base() {} 
} 

一個新的用戶控件,名爲ActionTile:

public partial class ActionTile : MyBaseType {} 

當我把這個在我的XAML:

<myType:MyBaseType 
    ... (other XAML imports) 
    xmlns:myType="using:MyNamespace"/> 

編譯器炸燬。

如果要複製,請創建一個從UserControl繼承的基類,然後實現一個從基類繼承的控件,並嘗試創建一個新的新類型的UserControl。正如我所說,在Windows 7的WPF中工作正常。

+0

可能是一個錯誤。 – 2012-01-20 22:24:49

+0

我開始懷疑自己;無論是Xaml編譯器錯誤還是不同的語法,在任何地方都沒有記錄。如果我找到一些我一定會發布的內容,請撥打一些幫助。 – 2012-01-25 20:24:55

回答

7

WinRT XAML元素與WPF XAML元素不同。在WPF中,UserControl類是在命名空間System.Windows.Controls中定義的。而WinRT的UserControl在Windows.UI.Xaml.Controls中定義。

將代碼從WPF移動到WinRT時,必須確保使用正確的命名空間中的類。通常,WPF元素在System.Windows命名空間中定義,而WinRT XAML元素在Windows.UI.Xaml中定義。

在Windows.UI.Xaml中定義的XAML元素實際上是具有.Net RCW的WinRT對象來訪問這些對象。這就是爲什麼您可以在本機C++中使用WinRT XAML元素的原因。

+0

一旦我轉移到WinRT,我將繼承改爲Windows.UI.Xaml.Controls.UserControl,但經歷了相同的結果。我懷疑它是Xaml編譯器中的一個錯誤,或者它是WPF Xaml和WinRT Xaml之間的語法變化,我無法找到文檔。 – 2012-01-25 20:24:08

+0

我試過這個,它是一個錯誤。如果您查看obj目錄中的YourPage.g.cs,您會注意到該類仍顯示爲從UserControl繼承。看起來好像這個文件在你做出改變後沒有被覆蓋。刪除obj和bin文件夾後,我能夠正常運行。 – sarvesh 2012-01-25 21:42:28

+1

感謝您的幫助 - 我也可以複製這一點。絕對是一個錯誤。 – 2012-01-31 01:24:39

2

是的,Win 8 XAML支持用戶控件。解決這個問題的最好方法是通過'add new'菜單選項添加一個新的用戶控件。這應該會給你一個編譯的空用戶控件。然後,您可以在此模板的基礎上構建。

+0

Thx - 爲更清晰地編輯。創建用戶控件不是問題,它創建了一個基本類型,然後從UserControl繼承。 – 2012-01-20 03:23:20

相關問題