9

Visual Studio Express 2012 for Windows Phone で Windows Phone 7.1 アプリを作成しています。

この名前空間を MainPage.xaml に追加しました。

xmlns:myNameSpace="clr-namespace:MyApp"

この:

<Grid.Resources>
        <myNameSpace:MyClass x:Key="referenceToMyClass" />
</Grid.Resources>

そして、同じファイルで次のように使用されます:

<ListBox Name="MyListBox"
         Height="{Binding ElementName=ContentPanel, Path=Height}"
         Width="{Binding ElementName=ContentPanel, Path=Width}"
         ItemsSource="{StaticResource referenceToMyClass}"
         DisplayMemberPath="MyAttribute" />

MyClass は次のようになります。

namespace MyApp
{
    class MyClass : ObservableCollection<AnotherClass>
    {
        public MyClass()
        {
            Class temp = new AnotherClass("Example attribute");
            Add(temp);
        }

        public void AddAnotherClass(AnotherClass anotherClass)
        {
            Add(anotherClass);
        }
    }
}

したがって、携帯電話でデバッグしようとすると、次のエラーが表示されます。

タイプ 'System.Windows.Markup.XamlParseException' の初回例外が System.Windows.dll で発生しました 追加情報: タイプ 'MyApp.MyClass' で一致するコンストラクターが見つかりませんでした。

4

3 に答える 3

17

これは、クラスが公開されていないためです。する必要があります

public class MyClass : ObservableCollection<AnotherClass>

XAML は非パブリック オブジェクト/クラス/プロパティにバインドできません

于 2013-01-27T20:54:48.073 に答える
2

MissingMethodExceptionコードがxaml オブジェクトのコンストラクターで を発生させた場合にも、この例外が発生する可能性があります。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var t = Activator.CreateInstance(typeof(T), typeof(int)); // Missing constructor
        // or:
        //this.GetType().InvokeMember("NonExistingMember", BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, this, new object[0]);
    }
}

public class T
{}

xaml パーサーは、MainWindowクラスのコンストラクターが見つからなかったと誤って報告します。スローされた例外の「内部例外」を調べると、失敗の本当の理由が明らかになります。

于 2013-09-14T06:18:27.217 に答える
0

私が行ったのと同じ特定の問題に遭遇した人に役立つことを期待して、この回答を追加しています。

TeamCity は、いくつかの依存する SilverLight プロジェクトのビルドに失敗し、resgen.exe エラーと、洞察をまったく提供しない遍在する一般的なエラー コードを報告していました。

SilverLight プロジェクトを v3 から v5 にアップグレードして TeamCity をビルドできるようにしましたが、SilverLight 画面の 1 つが何も表示されず、FireFox を使用してエラーは報告されませんでした。

Visual Studio 2010 と IE を使用してデバッグすると、OP と同じエラー メッセージが表示され、InitializeComponent() の呼び出しで発生したというバリエーションがありましたが、違いは、クラスが既にパブリックであったことです。

問題は、アップグレードされたプロジェクトで resource.resx ファイルに問題があり、SilverLight プロジェクトからそれらを完全に削除すると、すべてが意図したとおりに機能したことでした。

于 2015-02-24T16:16:29.230 に答える