我在使用WPF中的NameScopes時出現了一個奇怪的行爲,我創建了一個名爲FadingPopup的CustomControl,它是Window的子類,沒有什麼特別的。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中。 但是,它似乎綁定試圖通過FadingPopup(這是null)的NameScope來解析ElementName,因此綁定不起作用...
我的第一次剪切效果很好,如果我指定一個NameScope類FadingPopup:
static FadingPopup()
{
NameScope.NameScopeProperty.OverrideMetadata(typeof(FadingPopup), new PropertyMetadata(new NameScope()));
}
,但我不喜歡這樣的解決方案,因爲我不明白爲什麼,在第一個片段,PREC在窗口的名稱範圍註冊,但elementName爲與FadingGroup的名稱範圍(解決默認爲空)...
有人可以向我解釋發生了什麼事嗎?爲什麼我的第一個片段不起作用,如果我沒有爲FadingGroup指定默認的NameScope?
您是否嘗試過x:Name =「prec」? – user7116 2009-06-02 21:09:39
你能找到解決方案嗎?(你可能會發布自己的答案)? – 2015-07-01 20:18:58