WPFでNameScopesと奇妙な動作をしています。私は何も特別なものがないWindowの子クラスであるFadingPopupというCustomControlを作成しました。WPFのNameScopeはどのように機能しますか?
<Window.Resources>
<local:FadingPopup>
<Button Name="prec" Content="ahah"></Button>
<Button Content="{Binding ElementName=prec, Path=Content}"></Button>
</local:FadingPopup>
</Window.Resources>
このスニペットでは、バインディングは機能しません(常に空です)。これらのボタンをリソースからウィンドウの内容に移動すると、次のようになります。
<Window ...>
<Button Name="prec" Content="ahah"></Button>
<Button Content="{Binding ElementName=prec, Path=Content}"></Button>
</Window>
バインディングは期待通りに機能します。それは同様に動作
<Window...>
<Window.Resources>
<local:FadingPopup>
<Button Name="prec" Content="Haha"></Button>
</local:FadingPopup>
</Window.Resources>
<Button Content="{Binding ElementName=prec, Path=Content}"></Button>
</Window>
:
今、私は、これら二つのスニペットのミックスを試してみました。
明らかに、ボタンprecがリソース内にあれば、ウィンドウのNameScopeに自身を登録します。 しかし、Bindingは、FadingPopupのNameScope(null)でElementNameを解決しようとしているため、バインディングが機能しないようです...
私の最初のスナップは、MyクラスFadingPopup:
static FadingPopup()
{
NameScope.NameScopeProperty.OverrideMetadata(typeof(FadingPopup), new PropertyMetadata(new NameScope()));
}
しかし、私は、なぜ、最初のスニペットで、PRECは、ウィンドウのNameScopeの登録されている理解していないので、私は、このソリューションが好きではありませんが、elementNameがFadingGroupのNameScopeの(で解決されますデフォルトではnullです)...
誰かが私に何が起こっているのか説明できますか? FadingGroupのデフォルトのNameScopeを指定しないと、最初のスニペットが機能しないのはなぜですか?
x:Name = "prec"を試しましたか? – user7116
これに対する解決策を見つけることができますか(自分自身を回答として投稿する可能性があります)? –
申し訳ありませんが、それは完全に私が説明を見つけて、ちょうど NameScope.NameScopeProperty.OverrideMetadata(typeof演算(FadingPopup)、新しいPropertyMetadata(新しいNameScopeのを()))を使用しないと思います:( 忘れてしまった、6年が経ちました; –