基本的に同じname scope(これをお読みください)にする必要があります。ほとんどのUI要素は同じ名前のスコープを共有する同じツリーにありますが、ブレークとバリア(スタイル/テンプレート)があり、DataGrid
というような抽象オブジェクトがある場合、名前スコープはまったくありません。
私は、問題に遭遇し、共通の領域を知っているが、すべての状況を先験的に伝える簡単な方法はないと思うほど、WPFで十分に作業してきました。
これが本当であれば、それはバインディングのElementNameが全くテンプレートで動作してはならないという意味ではありませんか?しかし、私は間違いなく私のテンプレート内のElementNameにいくつかのワーキングバインディングを持っています。
内は同じスコープです。ここでのポイントは、テンプレートを適用して独自のスコープを持たない場合、競合が発生することです。
<Button/>
<Button/>
我々はControlTemplate
を展開すると、あなたのようなものになるだろう。もちろん、我々は名前の競合になるだろう
<Border Name="bd" Background="{TemplateBinding Background}">...</Border>
<Border Name="bd" Background="{TemplateBinding Background}">...</Border>
を。
DataTemplates
と同じItemsControls
のテンプレートに名前を付けると、その名前が他のアイテムのテンプレートに適用された同じコントロールインスタンスと競合することになります。別のノートで
、論理的にのみ、その名前を持つつのインスタンスが存在する可能性があるため、あなたが外にテンプレート内からバインドすることができたり、「クローズ」の名前のスコープがあるかに基づいて、彼らに明確な優先権を与えることができます、例えば
<TextBox Name="tb" Text="Test"/>
<ItemsControl ItemsSource="ABC">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Text, ElementName=tb}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
'ElementName'のみ結合た名前スコープ同じ[NameScopeの(http://msdn.microsoft.com/en-us/library/ms746659.aspx) –
の要素のために働きますか?これらのような : のxmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" のxmlns:X = "http://schemas.microsoft.com/winfx/2006/xaml" しかし、もしそれらの2つだけであれば、私のファイルのすべてがそれらを持っているので、ElementNameを使ってすべてを参照することができます。 –
これは 'Namescope'ではなく' Namespace'です。それらは2つの異なる概念です。 'Namespace'は' XML'コンセプト、 'Namescope'はXAMLコンセプトです。 –