与ElementName绑定不适用于WPF TabItem内的动态构造控件

时间:2016-10-05 13:24:50

标签: c# wpf

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

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

它们都放在同一个网格中。

如果我将Grid直接放在UserControl中,绑定工作正常。 但是,当我将Grid放在TabItem中,然后将TabItem放在我的UserControl的TabControl中时,绑定不起作用。

我们能够通过如下改变绑定来解决这个问题,但我真的很想理解为什么以前不起作用。

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

即使复选框和组合在同一个范围内,这是范围问题吗?

2 个答案:

答案 0 :(得分:3)

根据Arie的回答,我能够理解这个问题。

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

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

答案 1 :(得分:2)

这可能是namescopes的问题。 TabItem是一个容器,并且有自己的名称范围,您必须使用myNameScope.RegisterName()注册您在代码隐藏中创建的控件的名称,例如this。然后,您就可以使用ElementName绑定。