.net - WPF 中的 NameScope 如何工作?

标签 .net wpf

我在 WPF 中的 NameScopes 有一个奇怪的行为,我创建了一个名为 FadingPopup 的 CustomControl,它是 Window 的子类,内部没有任何特殊之处。

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

在此代码段中,绑定(bind)不起作用(始终为空)。如果我像这样将这些按钮从资源中移到窗口的内容中:

<Window ...>
    <Button Name="prec" Content="ahah"></Button>
    <Button Content="{Binding ElementName=prec, Path=Content}"></Button>
</Window>

绑定(bind)按预期工作。

现在,我尝试将这两个片段混合使用:

<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,因此绑定(bind)不起作用......

如果我在我的类 FadingPopup 中指定一个 NameScope,我的第一个片段效果很好:

static FadingPopup()
{
    NameScope.NameScopeProperty.OverrideMetadata(typeof(FadingPopup), new PropertyMetadata(new NameScope()));
}

但我不喜欢这个解决方案,因为我不明白为什么在第一个代码片段中,prec 注册在 Window 的 NameScope 中,而 ElementName 是用 FadingGroup 的 NameScope 解析的(默认为 null)。 ..

有人可以向我解释发生了什么吗?如果我没有为 FadingGroup 指定默认的 NameScope,为什么我的第一个代码片段不起作用?

最佳答案

你应该检查你的控件上的 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>

关于.net - WPF 中的 NameScope 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/800317/

相关文章:

c# - 为什么 TimeoutException 不会对我的 channel 造成故障?

c# - MonoTouch 上的 DateFormat 解析

c# - 什么是 Server.HtmlEncode()?

c# - dynamic.ToString() 意外行为

.net - WPF Set Owner on Window 在自己的专用 UI​​ 线程上创建

c# - WPF Datagrid 多行验证

.net - 为什么 .NET 不记录 StackOverflow 异常的堆栈跟踪?

c# - 按住修饰键时,所有 WPF 上下文菜单似乎都无法正确处理突出显示的项目

wpf - 在WPF MVVM Prism应用程序中使用OnPropertyChanged和发布之间有什么区别?

mysql - 在十字路口 : Choice Between MySQL vs MSSQL -> Importance: Reporting