我将 Jason Kemp's cool CueBanner class 用于 WPF 中的“水印”文本框:

<TextBox
    hpext:CueBanner.Content="Find Text"
    hpext:CueBanner.Padding="2,6,0,0"
    />

wpf - 以编程方式绑定(bind) WPF 中的附加属性-LMLPHP

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

他的代码从装饰控件的填充和边距推断 ContentPresenter,但我添加了 hpext:CueBanner.Padding 以便我可以将其显式设置为我更喜欢的值。
contentPresenter.Margin = CueBanner.GetPadding(adornedElement);

到现在为止还挺好。

麻烦来了:它可以工作,但我想改为绑定(bind)它。
var binding = new Binding("hpext:CueBanner.Padding") { Source = adornedElement };

BindingOperations.SetBinding(contentPresenter, ContentPresenter.MarginProperty, binding);

但是我用什么作为源属性的路径呢? "hpext:CueBanner.Padding" 不起作用,也不应该起作用;该命名空间在那里不存在。 "CueBanner.Padding""(CueBanner.Padding)" 没有乐趣。 "MyProject.Extensions.CueBanner.Padding" 也不起作用,我不明白为什么它应该起作用。

我在 PropertyPath 中看不到任何有用的东西,但是当我读到它时,我的头脑开始变得有点空白。

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

最佳答案

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

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

关于wpf - 以编程方式绑定(bind) WPF 中的附加属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36505877/

10-10 16:08