2009-05-14 28 views
17

私のUI XAMLでは、基本的にいくつかのフォームに共通する機能を含むクラス "BaseView"から継承していますが、 BaseView型のインスタンスを作成しません "。コードがコンパイルされて実行されますが、デザイナーでフォームを表示できないのは残念です。より良い方法がありますか?ありがとう。WPF Designer "タイプのインスタンスを作成できませんでした"

XAML:

<vw:BaseView 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:vw="clr-namespace:ReviewClient" 
    x:Class="ReviewClient.MainPage" 

...

+0

ReviewClientはXAMLの親アセンブリですか?そうでなければ、このXAMLファイルを含むアセンブリにReviewClient参照を追加する必要があります。 – Gishu

+0

ReviewClientはローカルネームスペースです。 – jchadhowell

答えて

21

問題は、基本クラスがabstractとして定義されていたということでした。これにより、設計者は失敗しました。この問題は、Laurent Bugnionのブログのコメントセクションで詳しく説明されています。http://geekswithblogs.net/lbugnion/archive/2007/03/02/107747.aspx

+2

ありがとう!私はちょうどこの問題を自分で持っていた。 – Stephen

+0

あなたが書き留めたリンクに、デザイナーのための解決策が見えません。 –

+0

解決策は、ベースクラスをコンクリートにすることです(つまり、ベースクラスから抽象キーワードを削除することです)。非常に満足できる解決策ではありませんが、機能します。 –

4

もう1つの考えられる原因は、ここで見つかったので、将来のユーザーにこの回答を追加しています。プロジェクトが信頼できないソース(ファイルサーバーなど)。

この場合、デザイナーはアセンブリを読み込まないため、同じ "インスタンスを作成できませんでした..."エラーが発生しました。解決策は引き続きOKをビルドしてデバッグします。

1

さらに別の原因が考えられます。

私はイベントを生成する子コントロールを持つユーザーコントロールを持っています。リストコントロールのselection_changed。 select_changedイベントハンドラは、他の子コントロールに変更を加えます。

初期化中、リストボックスの選択された項目プロパティが変更され、selection_changedイベントがトリガされます。ハンドラは他の子コントロールを更新しようとしますが、まだインスタンス化されていないためできません。これにより、NULLポインタ例外が発生し、問題が発生します。

NULLポインタの問題が処理されると、コントロールをインスタンス化して親コントロールに表示することができました。

0

MVVMクラスがコンストラクタ内のデータベースにアクセスしていて、それが問題で、例外がスローされるという問題があります。アプリケーションが設計モードで動作しているかどうかを確認するだけです。

2

もう1つの原因。私のコントロールクラスは次のように、リソースから初期化された静的フィールドを持っていた:リソースは、デザインモードでは使用できないので、XAMLエディタでnull参照の例外をスローしていました

static Color s_ImgColor = (Color)TheApp.Resources["PhoneForegroundColor"]; 

。カラーリソース(ブラシなど)でない場合、これは問題にはなりませんが、値型への型キャストはnull参照でスローアップされます。リサイズで

0

、それはあなたが具体的な実装の設計者に通知するために、カスタムTypeDescriptionProviderを使用する場合、抽象コントロールとデザイナを使用することが可能です:

私はthis articleを結ぶ別の質問へthis answer内の溶液を使用しています。この記事では、カスタムTypeDescriptionProviderと抽象クラスの具体的な実装を使用することを推奨しています。デザイナーはカスタムプロバイダーにどのタイプを使用するかを尋ね、コードは具体クラスを返すことができるので、抽象クラスが具体的なクラスとしてどのように表示されるかを完全に制御することができます。

7

私はこれに非常に有用な解決策を見つけました: http://www.progware.org/Blog/post/WPF-Designer-Error-Could-not-create-an-instance-of-type.aspx

このリンクをクリックすると、WPFデザイナウィンドウがXAMLでUIや救済策を表示するには、コンストラクタを実行する方法について説明します。 エラーを与える可能性がありますコンストラクタコードの任意の部分に次のコードを追加:

if(!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) 
{ 
    //code producing exception   
} 

関数名は自明です。 :) このリンクは、XAMLのデバッグに関する問題の解決方法も提供します。

0

、別の可能な状況(これはWPのための少なくともSLの実際のです):

あなたのクラスのinstanseを作成した場合(例:<local:MyDataSource />。)その後、それはパブリックにする必要があります。クラスが内部クラスの場合は、設計時には動作しますが、実行時にこの例外が発生すると失敗します。

0

私がこのエラーを取得した理由は、私が追跡するのは簡単ではありませんでした。私のコンバータクラスは公開されていませんでした。クラスのアクセシビリティを変更するだけでそれを修正しました。

public class StringToLowerConverter : IValueConverter 
関連する問題