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에 등록됩니다. 하지만 Binding은 FadingPopup의 NameScope (null 임)로 ElementName을 해결하려고 시도하므로 바인딩이 작동하지 않는 것 같습니다.
내 NameScope를 지정하면 잘됩니다. 클래스 FadingPopup :
static FadingPopup()
{
NameScope.NameScopeProperty.OverrideMetadata(typeof(FadingPopup), new PropertyMetadata(new NameScope()));
}
하지만 왜 첫 번째 코드에서, PREC는 윈도우의 NameScope에 등록되어 이해하지 않기 때문에 나는이 솔루션을 좋아하지 않지만, ElementName을가 FadingGroup의 NameScope (로 해결 기본적으로 null입니다.) ...
누군가가 내게 무슨 일이 일어 났는지 설명 할 수 있습니까? FadingGroup에 기본 NameScope를 지정하지 않으면 첫 번째 코드 단편이 작동하지 않는 이유는 무엇입니까?
x : Name = "prec"을 사용해 보셨나요? – user7116
답변을 게시 할 수있는 해결책을 찾을 수 있습니까? –
죄송합니다, 그것은 (새 PropertyMetadata (새 NameScope())) 대해서 typeof (FadingPopup) 은 내가 설명을 찾을 생각하지 않는다 :(완전히 잊고 6 년이, 그냥 NameScope.NameScopeProperty.OverrideMetadata을 사용하고있다 ; –