2011-12-22 13 views
0

まず、これに対する答えを見つけようと試みるために、まず長く探しました。私はこの問題の専門家の助けを求めてここにたどり着いた。StaticResourceはなぜ必要ですか?

私は現在、Windows Phone 7のプログラミングについての本を読んでいます。現在、データバインディングについて学んでいます。私はWPFのDataBindingのフォーマットに関する質問を主にStaticResourceの機能について説明しました。

次のコードでは、スライダとテキストブロックが表示されます。テキストブロックはスライダにバインドされ、スライダを移動するとテキストブロックの値が変更されます。 TruncationConverterクラスが作成され、キーワード "truncate"を使用してXAMLで呼び出すことができます。これは電話:ApplicationPage.Resourcesで宣言されています。

だから、これは右

<TextBlock Name="txtblk" 
Text="{Binding ElementName=slider, 
Path=Value, 
Converter={StaticResource truncate}}" 

であり、これは本は本当に1は、関数の前にStaticResourceを入れなければならない理由を説明に行ったことがない

<TextBlock Name="txtblk" 
Text="{Binding ElementName=slider, 
Path=Value, 
Converter=truncate}" 

間違っています。

なぜ、あなたはなぜ呼び出す前にStaticResourceを置く必要があるのですか?それは何ですか、その機能は何ですか?切り詰める前にStaticResourceを置かないとエラーになるのはなぜですか?

ありがとうございます!私が行くと、別のコントロールまたはコンバータを作成したり、言うならば

答えて

0

基本的にはStaticResourceだから別の例のように

を「切り捨てる」例えばの機能を保持するのResourceDictionaryに可能性の高い外部のプロパティを見つけるためにそれを言っている置くことになりますアプリケーションの他の要素全体で利用できるようにしたい場合でも、1つの場所(リソースディクショナリ)でのみ編集可能ですが、すべてで使用可能なリソースとして作成されます。 a StaticResource

スライダとTextblockを配置したときと同じように、デフォルトでは、CoreStylesリソースディクショナリにあるそれぞれのスタイルが呼び出されます。彼らがやったことや見た目を変えたいのであれば、私はリソースをコピーし、名前を変更して名前を変更し、それを呼び出すことができます。

+0

1

Converterクラスのコンストラクタは、作業。マークアップ拡張機能では、オブジェクトグラフでオブジェクトを事前に定義する必要があります。これは、コンバータクラスにキーを割り当てたときに行われたことです。 XamlパーサがStaticResource(またはDynamicResource)を見ると、値が見つかるまでオブジェクトグラフ内を上向きに見始める。実行時に、クラスのインスタンスが作成され、コンバージョンを実行するために使用されます。コンバータのインスタンスが作成されると、WPFはアプリケーションのライフタイムに使用します。したがって、「静的」です。

「StaticResource」は、コンバータをDynamicResourceにすることはできませんが、Xamlの構文規則などの理由から、余計なまたは冗長なように見えます。

+0

これは2つの良い答えです! Hmmm ... – parion

+0

Petzoldのテキスト「アプリケーション=コード+マークアップ」が得られれば、たくさんのWPFの内部について素晴らしいリファレンスを得ることができます。 –

関連する問題