15

MSDNは、イベントセッターについて次のように述べています。

イベントセッターは、テーマリソースディクショナリに含まれているスタイルでは使用できません。これは、実行時のテーマリソースディクショナリがルーズバイナリXAML(BAML)ファイルであることが多く、ハンドラーを定義する付随するコードビハインドが存在する可能性がある場所にスコープが定義されていないためです。

これは、このSOの質問に対する最初の回答によって確認されます。

リソースxamlにコードビハインドファイルを含めることはできません。通常、これらは「loosexaml」と呼ばれます。これについては、EventSetterに関するmsdnで読むことができます。

しかし、私はまだイベントセッターの制限を理解していません。リソースディクショナリにコードビハインドファイルを使用してみました。上記のリソースディクショナリのスタイル内で定義されたテンプレート内に含まれるコントロールのイベントにイベントハンドラーを割り当てましたが、機能しました。

一方、同じリソースディクショナリのスタイルにイベントセッターを追加すると、例外が発生します。

それがうまくいくという特別なケースにぶつかったことがありますか?

または、テンプレートでのイベントハンドラーの設定は常に機能しますが、機能する場合は、同じリソースディクショナリのスタイルでイベントセッターを使用できないのはなぜですか?

私の質問は要約すると:

テーマリソースディクショナリは多くの場合ルーズバイナリXAMLであるというMSDNのステートメントは、正確には何を意味しますか?どのくらいの頻度で、どのような状況で正確にですか?

4

1 に答える 1

2

これは、コードビハインドまたは名前空間内ではなく、独自にコンパイルされることを意味します。

別の言い方をすれば、緩い xaml ファイルにはコード部分がなく、たとえばデータベースからテキストとして読み込むか、その場でテキストとして生成し、コード化された関連付けなしで読み込むことができます。

天気に関しては、それが正当な理由であるかどうかです。それは各開発者次第ですが、これがルース xaml の意味です。

編集:

あなたのコメントに応えて、私は彼らが具体的にリソースとスタイルを参照していると思います。これらは最も一般的な「ルーズ ファイル」であり、一般にほとんどの人はコード ファイルでそれらをバックアップしないからです。個人的に私はそれを対処と見なしています。Loose=True 属性を簡単に追加して、この問題を解決できたはずです。

現実的には、問題はルーズ ファイルの量や使用頻度ではなく、欠落している機能を補うためにルールが作成されたという事実に関係しています。x、y、z を実行できないと言った方が、任意の数の緩い xaml ファイルが原因であると言うよりも、サポートを構築していないため、はるかに簡単です。

于 2013-02-19T00:11:07.627 に答える