2

マークアップ拡張機能を広く使用するデータ バインディング、コマンド、リソース、要素バインディング、スタイルなどの WPF の概念について学習していますが、マークアップ クラスの背後にある意味を理解するのに問題があります。に使用する必要があることを理解しています。したがって、クリアする必要があるいくつかのポイントがあります: (すべてのコード スニペットは Pro WPF in C# 2010 の本からのものです)

  1. 静的拡張の意味と使用法は何ですか? as で宣言できる静的リソースを宣言するために使用できますが、この xaml は私を混乱させます:

    <Button ... Foreground="{x:Static SystemColors.ActiveCaptionBrush}" >
    

    {x:Static SystemColors.ActiveCaptionBrush}では、ここで static の役割は何ですか? ここで x:Dynamic を使用すると何が変わりますか? この本は、この xaml がこのコードビハインドと同等であると述べています:

    cmdAnswer.Foreground = SystemColors.ActiveCaptionBrush;

    これは、静的プロパティを持つクラスがある場合、次のようなものを使用できるはずであることを意味します。

    <Button ... Foreground="{x:Static MyClass.SomeStaticProperty}" >
    

    クラスを作成したにもかかわらず、 local:Static (ローカル名前空間を参照) を使用しようとしましたが、VisualStudio では使用できませんでした。これを達成する適切な方法は何ですか?

  2. バインディングの意味は何ですか? これは、リソースのバインド、またはデータまたは要素のバインドに使用されます。要素バインディングは理解できましたが、要素ではないオブジェクトへのバインディングが問題を引き起こしました。例えば:

    <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},
    Path=Source}"></TextBlock>
    

    ここでは、テキストを SystemFonts.IconFontFamily プロパティにバインドしています。この場合の x:static の使用法と、作成したクラスのプロパティにバインドする方法を教えてください。また、バインディング ターゲットの値が変更された場合、テキスト フィールドのテキスト プロパティを更新する方法を教えてください。バインディングのため、それ自体で更新する必要がありますが、これは当てはまりますか?

    本のすべての例は SystemFonts.IconFontFamily を利用していますが、そのようなバインディングの使用法と、私が作成したクラスに対してそれを行う方法を説明しているものはありませんか? この点に関して、何らかの助けが必要です。バインディングについてもっとお聞きしたいのですが、バインディングのみについては別の質問でお答えします。

  3. 最後に、これやあれを行う方法ではなく、何が起こっているかを説明する本またはリソースをお勧めしますか?

4

1 に答える 1

3

答え....

1)

あなたが言った ...


...これは、静的プロパティを持つクラスがある場合、次のようなものを使用できるはずであることを意味します:

   <Button ... Foreground="{x:Static MyClass.SomeStaticProperty}" >

クラスを作成したにもかかわらず、 local:Static (ローカル名前空間を参照) を使用しようとしましたが、VisualStudio では使用できませんでした。これを達成する適切な方法は何ですか?


トライアルの試みは正しかったのですが、その名前空間トークンを適用した用語は正しくありませんでした....local名前空間トークンは、その下で宣言されているクラスに適用されます...

   <Button ... Foreground="{x:Static local:MyClass.SomeStaticProperty}" >

有効SomeStaticPropertyBrush.

この例では、マークアップ全体が内部的にBindingas ...と同等でした。

   Binding.Source = {x:Type local:MyClass}
   Binding.Path = SomeStaticProperty.

2)

あなたは例を持っていました...


   <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},     
                             Path=Source}">
   </TextBlock>  

したがって、例 1 と同じ等価性を使用して、この例に適用します...

    <TextBlock Text="{Binding Source={x:Type SystemFonts},     
                              Path=IconFontFamily.Source}">
    </TextBlock>  

3)

私はこのすべてをMSDNから学びました... それ以外の正当な情報源を得ることができるとは思いません。

于 2011-10-14T05:10:50.440 に答える