以编程方式绑定WPF中的附加属性

15e*_*153 3 data-binding wpf xaml attached-properties

我正在使用Jason Kemp的酷CueBanner课程来为WPF中的"水印"文本框:

<TextBox 
    hpext:CueBanner.Content="Find Text"
    hpext:CueBanner.Padding="2,6,0,0"
    />
Run Code Online (Sandbox Code Playgroud)

不要告诉Ayn Rand

Jason的代码以ContentPresenter编程方式创建,将其内容设置为CueBanner.Content,将子类添加ContentPresenterAdorner子类,并在适当时显示它.

他的代码推断了ContentPresenter装饰控件的填充和边距,但我添加了,hpext:CueBanner.Padding所以我可以明确地将它设置为我更喜欢的值.

contentPresenter.Margin = CueBanner.GetPadding(adornedElement);
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

这是麻烦:它有效,但我想绑定它.

var binding = new Binding("hpext:CueBanner.Padding") { Source = adornedElement };

BindingOperations.SetBinding(contentPresenter, ContentPresenter.MarginProperty, binding);
Run Code Online (Sandbox Code Playgroud)

但是我将什么用于源属性的路径? "hpext:CueBanner.Padding"不起作用,它不应该工作; 那个名称空间不存在.没有喜悦"CueBanner.Padding""(CueBanner.Padding)"."MyProject.Extensions.CueBanner.Padding"也不起作用,我不明白为什么它应该.

我看不到任何看起来有用的东西PropertyPath,但是当我读到我的思绪开始变得有点空白时.

我应该只是在XAML中这样做,不是吗?

Cle*_*ens 6

您可以从附加属性直接创建PropertyPath,如下所示:

var binding = new Binding
{
    Path = new PropertyPath(CueBanner.PaddingProperty), // here
    Source = adornedElement
};
Run Code Online (Sandbox Code Playgroud)