是否可以在代码中为绑定设置x:Reference
标记扩展名?
例如:
{Binding SelectedItem, Source={x:Reference ComboList}}
所以我创建了这样的绑定:
Binding b = new Binding("SelectedItem");
b.Source = //What to put here??
我以前使用的是ElementName
,但我在this question中提到了NameScope的一些问题,因为这个绑定是在我创建的UserControl内部的ComboBox中设置的,显然我是否使用ElementName
名称范围仅限于UserControl,而不是外部..
谢谢!
答案 0 :(得分:3)
将我的评论转换为答案:
{x:Reference}是一个XAML构造,它在C#代码中不可用
如果您需要UserControl
内的某个内容来获取外部属性,则必须在DependencyProperty
本身内将该属性创建为UserControl
,然后将您的元素绑定到该属性财产通过RelativeSource
:
在后面的UserControl代码中:
public static readonly DependencyProperty SomeProperty = DependencyProperty.Register("Some", typeof (SomeValue), typeof (YourUserControl), new PropertyMetadata(default(SomeValue)));
public SomeValue Some
{
get { return (SomeValue) GetValue(SomeProperty); }
set { SetValue(SomeProperty, value); }
}
UserControl Visual Tree中的某个地方:
<TextBox Text="{Binding Some, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"/>