18

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

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"

...

4

11 に答える 11

21

問題は、基本クラスが抽象として定義されていたことです。これにより、デザイナーは失敗しました。この問題は、Laurent Bugnionのブログのコメント セクションで詳しく説明されています。

于 2009-05-18T00:00:46.207 に答える
9

これに対する非常に便利な解決策を 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 に関する問題のデバッグに関する解決策も提供します。

于 2013-01-29T12:08:54.417 に答える
2

別の原因。私のコントロール クラスには、次のように、リソースから初期化された静的フィールドがありました。

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

デザイン モードではリソースを使用できないため、XAML エディターで null 参照例外がスローされます。カラー リソース (ブラシなど) ではない場合、これは問題にはなりませんが、値型への型キャストは null 参照で発生します。

于 2012-03-02T19:56:40.613 に答える
1

さらに別の考えられる原因。

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

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

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

于 2010-05-25T09:02:40.350 に答える
0

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

于 2010-10-27T06:18:09.250 に答える
0

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

クラスのインスタンスを作成する場合 (例<local:MyDataSource />)、それは public である必要があります。クラスが内部の場合、設計時には機能しますが、実行時にこの例外で失敗します。

于 2013-05-28T18:43:18.513 に答える
0

TypeDescriptionProviderWinForms では、カスタムを使用してデザイナーに具体的な実装を通知する場合、抽象的なコントロールでデザイナーを使用することができます。

この記事にリンクしている別の質問に対するこの回答のソリューションを使用しています。この記事では、抽象クラスのカスタムで具象的な実装を使用することを推奨しています。デザイナーはカスタム プロバイダーにどの型を使用するかを尋ねます。コードは具象クラスを返すことができるため、デザイナーは抽象クラスが具象クラスとしてどのように表示されるかを完全に制御できます。TypeDescriptionProvider

于 2012-09-14T10:10:58.850 に答える
0

何が問題なのかわかりませんが、次のように解決しました。

BaseClass のコンストラクターでコードを実行するのではなく、親クラスのコンストラクターからコードを実行する必要があります。

親クラスのコンストラクターから実行するメソッドを BaseClass に作成します。

于 2020-06-13T18:17:49.603 に答える