如何以编程方式设置x:Reference Markup Extension?

时间:2013-03-20 16:32:03

标签: c# wpf

是否可以在代码中为绑定设置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,而不是外部..

谢谢!

1 个答案:

答案 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}}"/>