WPFにおけるx名空間(一)について述べる.

4262 ワード

各業者が最初のWPFアプリケーションを作成する際にコンパイラによって自動的に生成されるxamlコードは、Windowというルートノードでx:Class=""という文字が見つかりましたか?また、x:Key=""やx:Name=""などの使用方法もあります.これらには共通点があります.それはすべてxで始まることです.xはxaml名空間の略称であり、マッピングされたのはhttp://schemas.microsoft.com/winfx/2006/xamlである.このクラスにはXAML言語の解析に関連するクラスが含まれています.では、x名空間というものを見てみましょう.
  C#と同様、XAMLにも独自のコンパイラがあります.XAMLは解析されコンパイルされ、最終的にマイクロソフトの中間言語がプログラムセットに格納されるようになります.XAMLの言語を解析してコンパイルする過程で、XAMLコードのコンパイル結果がどのC#コードのコンパイラとマージすべきか、XAMLで宣言された要素師publicを使用するかprivateアクセスレベルを使用するかなど、コンパイラに重要な情報を教える必要があります.これらのプログラマがXAMLコンパイラとコミュニケーションできるツールはx名空間に存在する.
  xネームスペースには、次の3種類のツールがあります.
       一、Attributeタイプのツール
       二、ラベル拡張タイプのツール
       三、XAML指令要素タイプのツール
それでは、それぞれご紹介しましょう.
   一、x名空間におけるAttribue
     Attributeといえば、私がプログラミングを勉強していた頃、属性という概念は、英語の技術文章にAttributeとPropertyという二つの概念があり、中国語で翻訳しても「属性」と訳すことができたことを思い出す.すべてが「属性」である以上、それらの間にはどんな違いがありますか?資料を調べると、AttributeとPropertyは2つのレベルのもので、Attributeは言語のレベルのもので、コンパイラに見せたもので、Propertyは対象のレベルのもので、プログラミングロジックに使われているという解釈があります.両者に対してより適切な翻訳はAtrributeが「特徴」に訳され、Propertyが属性に訳されるべきである.では、xネームスペースのAttributeを見てみましょう.
1、x:ClassというAttributeの役割は、XAMLコンパイラにXMALラベルのコンパイル結果をバックグラウンドコードで指定したクラスとマージするように伝えることです.このAttributeを使用するには、いくつかの要件に従う必要があります.
  •           このAtrributeはxamlのルートノードの
  • にのみ使用できます.
  •           x:Classを使用するルートノードのタイプは、x:Classの値で示すタイプと一致するようにする
  • .
  •           x:Classの値が示すタイプは、宣言時にpartialキーワード
  • を使用する必要があります.
    サンプルコードは次のとおりです.
    フロントのxamlコード:
    <Window x:Class="WpfApplication3.Window9"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window9" Height="300" Width="300">
    
    

     
    バックグラウンドのcsコード:
    public partial class Window9 : Window
        {
            public Window9()
            {
                InitializeComponent();
                List<Student> students = new List<Student>(){
                    new Student(){Id=1,Name="Tim",Age=21},
                    new Student(){Id=2,Name="Tom",Age=22},
                    new Student(){Id=3,Name="Jim",Age=23}
                };
    
                this.listBox1.ItemsSource = students;
                //this.listBox1.DisplayMemberPath = "Name";
    
                Binding bind = new Binding("SelectedItem.Name") { Source = this.listBox1 };
                this.textBox1.SetBinding(TextBox.TextProperty, bind);
            }
        }
    
    

     
    2、x:ClassModifierというAttributeの役割はXAMLコンパイラが生成したクラスにどのようなアクセス修飾子が修飾されているかを教えることです.このAttributeを使用する場合は、次の点に注意してください.
  • このAttributeを使用するラベルには、x:Class Attribute
  • が必要です.
  • x:ClassModifierの値は、x:Classの値が示すタイプのアクセス修飾子と一致する必要があります
  • .
    たとえば、xamlコードのWindowタグでx:ClassModifier="public"を使用している場合は、まずこのタグにx:Class=""というAttribute-Valueが存在する必要があります.同時にxamlに対応するcsコードというクラスもpublicでなければならない.
    3、x:Name  このAttribtueについて、私が定義したのは一人の名前に相当し、区別するために使われています.このような例を挙げましょう.もし現実の生活の中で、ある先生が初めてクラスに行って授業を受けたら、彼女は学生たちの資料を持っていません.そうすれば、あなたはそれぞれの学生を出すことができますか.もし先生が学友达の资料があるならば、それでは先生は名前を読むことによって対応する学友を探し当てることができて、それではx:Nameはこのような作用があります!
         x:Nameの役割は2つあります.
  • はXAMLコンパイラに、ラベルにx:Name属性が付いている場合、このラベルに対応するインスタンスを生成するほか、このインスタンスに参照変数を宣言します.変数名はx:Nameの値
  • です.
  • x:NameのラベルにNameのプロパティが設定されている場合は、Nameのプロパティの値をx:Nameの値に設定し、この値をUIツリーに登録して検索しやすいようにする
  • 4、x:FieldModifierこのAttributeについては、参照変数のアクセス修飾子を設定するために使用されます.ただし、x:Nameを使用したラベルでx:FieldModifierプロパティを使用する必要があります.x:FieldModifierに対応する値は、x:Nameで生成された参照変数にアクセス修飾子を設定するためです.
    5、x:KeyはどんなxamlでもResourceを定義することができます.私たちはいくつかのコンテンツを抽出してResourceに置くことができます.もちろん、各コンテンツには独自の識別が必要です.x:Keyはこの役割を果たしています.あるコンテンツを使用するとき、x:Keyに基づいて対応するリソースを検索することができます.
    6、x:Shared  Attribute x:Keyを使用してオブジェクトを検索すると、いずれも1つのオブジェクトが取得されます.取得したオブジェクトがx:Sharedラベルを使用していない場合、オブジェクトを最初に検索すると1つのオブジェクトが取得され、2回目の使用時には最初の検索オブジェクトの1つのコピーしか取得されません.同じ検索オブジェクトを継続的に使用すると、メモリにコピーが増加し、メモリの消費量も増加します.取得されたオブジェクトにx:Shared=「true」タブが使用されている場合、取得されたオブジェクトを複数回繰り返し使用しても同じオブジェクトが使用されます.これでメモリの消費量が減ります!