我有一个复选框和一个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 });
即使复选框和组合在同一个范围内,这是范围问题吗?
答案 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
绑定。