WPF TabItem 内动态构建的控件无法使用 ElementName 进行绑定

3

我有一个复选框和一个下拉框,两者都是在代码后台构建的,如下所示:

 var el = new ComboBox();
 var checkBox = new CheckBox { Name = "myCheckBox" };
 el.SetBinding(UIEelement.IsEnabledProperty, new Binding("IsChecked") { ElementName = checkBox.Name });

它们都被放置在同一个网格内。

如果我将网格直接放置在用户控件中,绑定会正常工作。 但是,当我将网格放在选项卡项内,然后将选项卡项放置在我的用户控件的选项卡控件中时,绑定就无法正常工作。

我们通过将绑定更改为以下方式来解决此问题,但我真的想了解为什么之前的方法不起作用。

 el.SetBinding(UIEelement.IsEnabledProperty, new Binding("IsChecked") { Source = checkBox });

即使复选框和组合框在同一位置,这是否是范围的问题?


你能发布你的 Xaml 吗? - Rom
2个回答

4

根据Arie的回答,我终于理解了问题所在。

显然我的 TabItem 没有命名范围(NameScope.GetNameScope(tabItem) 返回 null)。所以我将 TabItem 命名范围设置为 myUserControl 命名范围:

  NameScope.SetNameScope(tabItem, NameScope.GetNameScope(myUserControl));

3

这可能是与命名空间有关的问题。 TabItem 是一个容器,有其自己的命名空间,在其中您将需要使用myNameScope.RegisterName()在代码后台注册控件名称,例如像这样。然后您就可以使用ElementName进行绑定了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接