WPFでは、X:名前と名前の属性の違いは何ですか?

タイトルはそれをすべて言います。時にはそれが思わNamex:Name属性が交換可能です。

だから、それらの間の明確な区別は何ですか?他の1の上に1を使用する場合はありますか?

彼らはパフォーマンスやメモリへの影響を持っている場合は間違った方法を使用しますか?


#1階

彼らは同じものではありません。

x:NameあるXAMLの主に参照要素に使用され、コンセプト。要素は、xを提供する場合:「指定されたときに属性名をXAML x:Name。コードベースXAMLを処理するときに、フィールドの名前で作成され、そしてフィールドがオブジェクトへの参照を含む」(MSDNに)したがって、デザイナー内部アクセスと、デフォルトで生成されたフィールド。

NameあるFrameworkElement任意の他のプロパティはXAMLのように、既存の文字列のプロパティWPFは要素のプロパティと一緒に記載されています。

結果として、他に手段x:Nameオブジェクトの広い範囲で使用することができます。これは、XAMLで何のための方法である技術を参照する名前を付けることができます。


ハウス#2

唯一の違いは、コントロールで同じアセンブリのためのユーザーコントロール場合は、名前があなたのコントロールを識別することができなくなり、エラーが「:名前、xは議会で同じコントロールを使用することである」になるということです。したがって、×:名前はWPFは、WPFのバージョンを制御しますという名前です。Winフォームレガシーとして名前のみ。彼らは別の使用xからXAMLプロパティを使用しているためという名前のWinformsとWPFのコントロールを区別したい:コントロールの識別に焦点を当てた制御プログラムの名前を表します。

ただコントロールの名前を保持し、それがメモリに常駐しているため、それに名前を付けるために、ではない覚えておいて、それは名前を制御するために使用されていることを警告していますが、ブランクとして使用されることはありません。


ハウス#3

名前

  1. FrameworkElementとFrameworkContentElementの子孫のためにのみ。
  2. ()同様の特性をコードし得るバックグラウンド値の代入に設定されています。

X:名前

  1. ほぼすべてのXAML要素で、
  2. 背景コードから提供される値の代入を()することはできない。それは命令として、それだけオブジェクト上に配置されたプロパティの構文を使用することができます。

XAML内に2個のFrameworkElement FrameworkContentElementのを使用する命令は、例外が発生します:フラグXAMLがコンパイルされている場合、例外が場合ローディングコンパイル時にタグがさもなければ起こる起こります。


#4階

一つの答えはXである:名前は、異なるプログラミング言語(例えば、C#)で使用される、フレームの名前。正直なところ、これは私が感じるものです。


ハウス#5

x:Name手段は、そのオブジェクトへの参照を保持するためにコードの背後にフィールドを作成します。

Name彼は言った:このオブジェクトのプロパティの名前を設定します。


ハウス#6

指定されたX:名前フィールドの名前は、コードに基づいて、XAMLの処理を作成なり、フィールドがオブジェクトへの参照を含んでいます。Silverlightのでは、管理APIを使用して、このフィールドの作成はまた、一緒にXAMLファイルとそのコードビハインドパーシャルクラスを連結するための責任があるのMSBuildターゲット手順によって行われます。この動作は、必ずしもXAML言語を指定されていません。そのプログラミングおよびアプリケーションモデルでの使用に適したシルバー×:名を特定の実装。

MSDNについての詳細を読みます...


#7の構築

XAMLでボタン要素を宣言するときに、あなたの参照されるクラスのボタンを実行しているWindowsで定義されています。

ボタンはこのような背景、テキスト、余白、.....とプロパティ名などの属性の数を持っています。

匿名オブジェクトが作成されると、あなたは、XAMLでボタンを宣言するときに今、名前というプロパティを持っていることを起こります。

典型的には、匿名オブジェクトを参照することができないが、WPF、XAMLプロセッサの枠組みの中で指定した名前プロパティの任意の値でオブジェクトを参照できるように。

非常に良い今まで。

オブジェクトを作成するための別の方法ではなく、匿名オブジェクトの名前付きオブジェクトを作成することです。このケースでは、このようにしてオブジェクトを識別しに供することができるように、:) Xを有する、XAML名前空間でそのようにXAML名前空間(属性名前を付けることができる)の名前と呼ばれるしたオブジェクトのプロパティ(設定でき参照。

結論:

これは、特定のオブジェクトのプロパティですが、X:名前は(定義されている一般的なオブジェクトクラスを持つ)オブジェクトのプロパティです。


#8の構築

カスタムコントロールを使用している場合、X:名前はメモリの問題が発生することがあります。これは、NameScopeのエントリの格納場所を保持します。

名前:私は絶対に必要な場合を除き、Xを使用していない、と述べました。


ハウス#9

変数。私の研究がされてx:Name、変数として使用。変数。しかし、Name変数として。名前が名前XAMLファイルの任意の場所にそれを呼び出すことはできませんが、この平均値xはありません。
例:

<StackPanel>
<TextBlock Text="{Binding Path=Content, ElementName=btn}" />
<Button Content="Example" Name="btn" />
</StackPanel>
<TextBlock Text="{Binding Path=Content, ElementName=btn}" />

あなたは名前を付けることができないButton属性はContent Binding、それが配置されているので、「BTN」であるStackPanel


ハウス#10

私はいつもXを使用します。名前は変異体です。これは、パフォーマンスに影響する場合、私は、私は次のような理由のために非常に簡単にそれを見つけ、知りません。独自のユーザーコントロールが別のアセンブリ内に存在する場合は、「名前」属性は常に十分ではありません。これは、ペーストのxを作る:Nameプロパティも簡単です。


ハウス#11

彼らは同じことを、自身がname属性を開示するフレーム要素がたくさんありますが、そうでない人は、それらを含めるために、あなたはXを使用することができます:それはすべての状況に適用されるため、名前:私は通常、xの使用を主張名 - 。

コントロールが(彼らは依存関係プロパティ内の使用を必要とするため)自体が依存関係の属性を開示した名前のために必要な場合があり、あなたはそうしないこともできます。

詳細は、MSDNで、ここここに

いくつかのWPFフレームワークレベルのアプリケーションは、xの使用を回避することができる場合があり:Nameプロパティいくつかの重要な基本クラスで指定されたWPF名前空間(例えばのFrameworkElement / FrameworkContentElementの)名称依存プロパティは、同じ目的を満たしているからです。特に、特定のアニメーションおよびストーリーボードサポートクラスでは、Nameプロパティのコードへのアクセスを持っていない要素を必要とし、いくつかの一般的なXAMLとフレームワークプログラムは、まだあります。あなたがしたい場合たとえば、あなたのコードの参照は、X:名前は、あなたはXAMLで作成し、タイムラインはそれらを指定変換する必要があります。

Nameプロパティは、クラスとして使用することができた場合は、名前とX:名前は属性として互換的に使用することができますが、あなたは同じ要素で同時に両方を指定した場合、エラーが発生します。


ハウス#12

X:名前と名前が別の名前空間を参照します。

X:名前は、 XAMLファイルの上にデフォルトの名前空間定義されたXへの参照です。

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

ただ、言うの使用、次のデフォルトの名前空間。

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

X:名前の表示があり、Xエイリアス名のスペースを。xはデフォルト値で、ほとんどの人はそれを維持していますが、任意の値に変更することができます

xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml"

だからあなたの参照は次のようになり名前:FOO

WPFでの名前空間を定義し、使用


OK、レッツは見て別の方法です。あなたはボタンのXAMLページにドロップするとします。あなたはできるX:名前名前は二つの方法で参照します。すべてのxmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" のxmlns:X = "http://schemas.microsoft.com/winfx/2006/xaml"は、複数のネーミングです基準空間。以来XAMLは持ってコントロールしながら、名前空間(100%ではないが)表現が持っているのFrameworkElementをし、Buttonクラスの継承モード:

Button : ButtonBase
ButtonBase : ContentControl, ICommandSource
ContentControl : Control, IAddChild
Control : FrameworkElement
FrameworkElement : UIElement, IFrameworkInputElement, 
                    IInputElement, ISupportInitialize, IHaveResources

予想されるようにそのため、FrameworkElementのものから継承された任意のは、そのすべてのパブリックプロパティにアクセスできるようになります。このように、のFrameworkElementの階層ツリーの最上部からそのNameプロパティを取得]ボタン、のために。だから、あなたが言うことができ、X:名前または名前は、それらがFrameworkElementのゲッター/セッターからアクセスされています。

MSDNのリファレンス

CLR名前空間複数のプロセッサによって使用されるWPF XAML CLRプロパティの定義は、単一のXML名前空間にマッピング。XmlnsDefinitionAttributeのプロパティは、アセンブリ、アセンブリレベル生成されたソースコードです。WPFアセンブリソースコードに共通名前空間(例えばSystem.WindowsやSystem.Windows.Controls)の様々なマッピングするために、このプロパティを使用http://schemas.microsoft.com/winfx/2006/xaml/presentation名前空間。

そのため、アセンブリ属性は次のようになります。

PresentationFramework.dll-XmlnsDefinitionAttribute:

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Data")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Navigation")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Shapes")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Documents")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Controls")]  

ハウス#13

これは、WPFのアイテムが、XMLの標準的な項目ではありませんBtBhは、 xがデフォルトの名前空間を示し、正しく質問に答えます。あなたは要素/属性の名前空間接頭辞を追加しない場合は、XMLで、それはあなたが名前空間をデフォルトする必要があることを前提としています。したがって、唯一の入力がNameちょうどさx:Name速記しました。XML名前空間の詳細については、参照リンクテキストを。


ハウス#14

XAMLは、実際には1名ですx:Nameクラスを使用することによってRuntimeNamePropertyAttribute(XAMLのにマップの一つとして、クラス属性x:Nameプロパティ)、その属性は次のようにWPF XAMLを使用して、一つのフレームにマッピングすることができますx:Name

この理由は、ランタイム・フレームワークは、WPFのように、「名前」の概念となっているようにすることです。たとえば、WPFは、FrameworkElementNameプロパティを導入しました。

一般的には、保存されていないクラスの必要性をx:Name使用することができます。XAMLのために、すべてのx:Name手段は、クラスコードの後ろに格納された値にフィールドを生成します。マッピング操作を実行すると、フレームに依存します。

では、なぜ、同じことを行うには、2つの方法がありますか?プロパティにマッピングされた二つの概念があるので、簡単な答えはあります。WPFは、実行時に(例えばバインドが使用するような)要素の名前を維持したい、とXAMLを使用して、コードフィールド内のクラスの背面からアクセスしたい要素を知っている必要があります。これら2に関連付けられた名前のエイリアス:NameプロパティXでマークWPF。

将来的には、XAMLは、より多くのxのために使用されます。名前は、たとえば、あなたが名前で参照する他のオブジェクトによってプロパティを設定することができますが、3.5およびそれ以前では、唯一のフィールドを作成するために使用されます。

あなたは、スタイルを使用するか、別のは、確かに問題ではなく、技術的な問題である必要があります。私は勧告を行うために他の人にそれを残します。

参照AutomationProperties.NameとX-VS:名前、アクセシビリティツールを、テストツールは、いくつかのAutomationProperties.Nameを使用しています。

オリジナルの記事は、0公表 ウォンの賞賛0 ビュー2219

おすすめ

転載: blog.csdn.net/p15097962069/article/details/103919768