我将 Jason Kemp's cool CueBanner
class 用于 WPF 中的“水印”文本框:
<TextBox
hpext:CueBanner.Content="Find Text"
hpext:CueBanner.Padding="2,6,0,0"
/>
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/