2012-01-18 8 views
2

XAML & C#を使用してMetroアプリケーションを開発しています。私はこれをWin7でWPFを使って始めました。 UserControlから継承した基本クラスを作成し、それを自分のXAMLに配置しようとしました。 Windows 8のBase UserControlクラスXAML Metro App

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

が、私はWin8で同じことを試してみましたが、残念ながら、私はエラーを取得する -

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

は今、この生成します:

は、Windows 7では、これは素晴らしい仕事 CompileXamlタスクが予期せずに失敗しました。 null参照例外です。

私はこれを完全に間違っている可能性があります - 私はちょうどそれに入るのを始めましたが、私はこの問題を隔離するのに苦労しています。これは何らかのチキン/卵の問題ですか?それともWin8 XAMLのカスタムユーザーコントロールをビルドする方法がありますか?

編集:私はそれがより明確であると役立つかもしれないと思った。私はユーザーコントロールを作成するのに問題がありません。UserControlから継承した自分のベースタイプのusercontrolを作成するのに問題があります。例えば:

基底クラス、私たちは、UserControlから継承し、いくつかの仮想メソッドを持っていMyBaseTypeを呼び出します:

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

ActionTileと呼ばれる新しいユーザーコントロール、:

public partial class ActionTile : MyBaseType {} 

Iこれを私のXAMLに入れてください:

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

コンパイラが爆発します。

UserControlを継承する基本クラスを作成し、基本クラスから継承するコントロールを実装し、その新しい型の新しいUserControlを作成しようとします。私が言ったように、Windows 7のWPFで正常に動作します。

+0

おそらくバグです。 –

+0

私は自分自身を疑い始めています。 Xamlコンパイラのバグかどこにも書かれていない別の構文のどちらかです。いくつかの助けを求める電話がありました。私が何かを見つけたら、私はそれを投稿します。 –

答えて

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の間の構文変更だと思っています。 –

+0

私はこれを試して、それはバグです。 objディレクトリのYourPage.g.csを見ると、クラスがUserControlから継承されたままであることがわかります。あなたが変更を加えた後、このファイルが上書きされないようです。私はobjとbinフォルダを削除した後、それを正常に実行することができました。 – sarvesh

+1

助けてくれてありがとう - 私もこれを複製することができます。間違いなくバグ。 –

2

はい、Win 8 XAMLはユーザーコントロールをサポートしています。これにアプローチする最善の方法は、 '新規追加'メニューオプションを使用して新しいユーザーコントロールを追加することです。これはコンパイルする空のユーザーコントロールを与えるはずです。このテンプレートの上に構築することができます。

+0

Thx - より明確にするために編集されました。ユーザーコントロールを作成することは問題ではなく、UserControlから継承する基本型の1つを作成しています。 –

関連する問題