2

小さな Silverlight 3 テスト アプリケーションがあります。これは、Silverlight、XAML、バインディングなどを学習する演習です。3 つのプロパティを持つ小さなテスト クラス (Test) があります。Val1、Val2、および合計。次のように XAML でリソースを宣言しました。

<UserControl.Resources>
    <app:Test x:Name="xamlTestObj"></app:Test>
</UserControl.Resources>

ユーザーコントロールにボタンがあります。このボタンのコード ビハインドは次のようになります。

        xamlTestObj.Val1 += 100;
        xamlTestObj.Val2 += 300;

ソリューションは正常にビルドされますが、実行すると、xamlTestObj を参照するときにボタン ハンドラーで NullReferenceException が発生します。ユーザー コントロールのリソース リストからオブジェクトを引き出すと、ボタン クリックを正常に実行できました。お気に入り:

        Test xamlTestObj = (Test)Resources["xamlTestObj"];
        xamlTestObj.Val1 += 100;
        xamlTestObj.Val2 += 300;

私を混乱させているのは、リソース リストからオブジェクトを引き出す必要がある理由です。コンパイラが xamlTestObj 参照を参照できる場合、それが宣言されているスコープ (この場合はユーザー コントロール) の有効期間中は "ライブ" である必要があるように思えます。WPF コントロールはこのように動作します。つまり、ユーザー コントロールに配置した任意のテキスト ボックスとボタンにアクセスできます。

誰かが私のためにこれをクリアできますか?

ありがとう :-)

4

1 に答える 1

1

私の知る限り、ビジュアルツリーの要素のみがInitializeComponentsメソッドの対応するフィールドに読み込まれます。リソースはビジュアルツリーの一部ではなく、必要な場合にのみロードされるため、対応するフィールドはnullのままです。

ちなみに、リソースx:Keyではなく使用する必要がありますx:Name

于 2010-01-12T01:21:27.430 に答える