在代码后台绑定属性

8

我有一个WPF应用程序和一个窗口。假设我的xml文件中有以下内容:

<Label Name="TitleLabel" Content="Some title" \>
<Label Name="BottomLabel" Content="{Binding ElementName=TitleLabel Path=Content">

假设我不能使用 XML 来创建 BottomLabel 和 TitleLabel。因此,我必须在我的 "Code behind" 中将 BottomLabel 创建为属性。如何在我的 "Code behind" 中为 Bottom label 的 Content 属性指定相同的绑定?是否有可能实现?
因此,我会有类似这样的内容:
public Label TitleLabel {get; private set;}
public Label BottomLabel {get; private set;}

public MyClass(){
    TitleLabel = new Label();
    TitleLabel.Content = "Some title";
    BottomLabel = new Label();
    BottomLabel.Content = // ?? what should be here ? How do I specify the binding
                          // that binds BottomLabel.COntent to TitleLabel.Content?
}

我可以写什么代替评论? 谢谢您的回答。

1个回答

21

以下是如何在代码中定义和应用绑定:

Binding binding = new Binding {
  Source = TitleLabel,
  Path = new PropertyPath("Content"),
};
BottomLabel.SetBinding(ContentControl.ContentProperty, binding);

请注意,对于不是从FrameworkElement派生的对象,您必须明确使用BindingOperations.SetBinding()而不是element.SetBinding()

BindingOperations.SetBinding(BottomLabel, ContentControl.ContentProperty, binding);

我猜我得使用 BindingOperations.SetBinding(),因为我的目标对象是 AnimationTimeline 类型。我认为我可以弄清楚如何做,但您能否为这种情况提供示例呢?至少对于以后阅读您的答案的人来说,这将非常有用。谢谢。 - Rasto
完成了您的初始示例,只需将第一个参数替换为您的时间轴,第二个参数替换为要绑定的 DP(例如Timeline.DurationProperty)。 - Julien Lebosquain
如果我在代码后台为一个控件指定了绑定,而控件的用户通过XAML添加了一个绑定,会发生什么?XAML绑定会覆盖代码后台绑定还是它们会共存? - Johan Larsson
1
@JohanLarsson 取决于顺序,最后一个将获胜,它们永远不会共存。 - Julien Lebosquain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接