目录
2、控件Tag、DataGridTextColumn元素无法绑定
引言
xaml代码中属性的绑定主要是通过元素名或类型进行查找绑定和解析的,但是当在后台生成控件或面对popup、menuitem时,发现他们都查找不到这时为什么呢?
局限性
1、无法绑定后台生成控件
xaml中声明的元素会自动被添加进可视化树中,但后台通过代码添加的控件无法被xaml代码绑定,如下:
//后台
TextBox tb = new TextBox("tb");
//xaml
<TextBlock Text="{Binding ElementName=tb,Path=Text}"/>
这样是绑定不成功的,我们需要注册 tb 这个名称,可以临时解决这个问题,但RelativeSource绑定时仍然找不到。
//后台
TextBox tb = new TextBox("tb");
this.RegisterName(tb.Name,tb);
//xaml
<TextBlock Text="{Binding ElementName=tb,Path=Text}"/>
对于RelativeSource可以通过x:Reference 解决,
<TextBlock Text="{Binding Source={x:Reference Name=tb,Path=Text}"/>
但仍然有问题,如果我们用x:Reference 将 控件的Tag绑定到自身 会出现循环依赖错误。因为Tag依赖 Button,而Button此时还没有构建完成。
<Button Name = "tb" Content = "Click me">
<Button.Tag>
<ItemsControl>
<TextBlock Text = "{Binding Source={x:Reference Name=tb},Path=Content}"/>
</ItemsControl>
</Button.Tag>
</Button>