2009-04-28 55 views
3

我在使用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?

+0

您是否嘗試過x:Name =「prec」? – user7116 2009-06-02 21:09:39

+0

你能找到解決方案嗎?(你可能會發布自己的答案)? – 2015-07-01 20:18:58

回答

-2

你應該檢查你的控件的DataContext,做這樣的事情,你應該沒問題。您可能需要添加路徑,但可能不會。

<Window.Resources> 
    <local:FadingPopup DataContext="{Binding}"> 
     <Button Name="prec" Content="ahah"></Button> 
     <Button Content="{Binding ElementName=prec, Path=Content}"></Button> 
    </local:FadingPopup> 
</Window.Resources>