不能将附加属性绑定到另一个依赖属性
本文关键字:属性 另一个 依赖 绑定 不能 | 更新日期: 2023-09-27 18:14:04
我正在写一个控件库。在这个库中有一些使用用户ui元素填充的自定义面板。由于lib中的每个子元素都必须具有"Title"属性,因此我编写了如下代码:
// Attached properties common to every UIElement
public static class MyLibCommonProperties
{
public static readonly DependencyProperty TitleProperty =
DependencyProperty.RegisterAttached(
"Title",
typeof(String),
typeof(UIElement),
new FrameworkPropertyMetadata(
"NoTitle", new PropertyChangedCallback(OnTitleChanged))
);
public static string GetTitle( UIElement _target )
{
return (string)_target.GetValue( TitleProperty );
}
public static void SetTitle( UIElement _target, string _value )
{
_target.SetValue( TitleProperty, _value );
}
private static void OnTitleChanged( DependencyObject _d, DependencyPropertyChangedEventArgs _e )
{
...
}
}
那么,如果我这样写:
<dl:HorizontalShelf>
<Label dl:MyLibCommonProperties.Title="CustomTitle">1</Label>
<Label>1</Label>
<Label>2</Label>
<Label>3</Label>
</dl:HorizontalShelf>
一切正常,属性获得指定的值,但如果我试图将该属性绑定到其他一些UIElement DependencyProperty,像这样:
<dl:HorizontalShelf>
<Label dl:MyLibCommonProperties.Title="{Binding ElementName=NamedLabel, Path=Name}">1</Label>
<Label>1</Label>
<Label>2</Label>
<Label Name="NamedLabel">3</Label>
</dl:HorizontalShelf>
会抛出一个异常:"不能在'Label'类型的'SetTitle'属性上设置'Binding'。"Binding"只能在DependencyObject的DependencyProperty上设置。"
我错过了什么?绑定似乎可以很好地工作,如果不是绑定到"Name",我绑定到MyLibCommonProperties中定义的其他附加属性。
将DependencyProperty定义中的UIElement
替换为MyLibCommonProperties
public static readonly DependencyProperty TitleProperty =
DependencyProperty.RegisterAttached(
"Title",
typeof(String),
typeof(MyLibCommonProperties), // Change this line
new FrameworkPropertyMetadata(
"NoTitle", new PropertyChangedCallback(OnTitleChanged))
);
我认为这可能是因为绑定隐式地使用指定的父类来调用SetTitle()
,所以它调用Label.SetTitle()
而不是MyLibCommonProperties.SetTitle()
我有一些自定义文本框属性相同的问题。如果我使用typeof(TextBox)
,我就不能绑定值,但如果我使用typeof(TextBoxHelpers)
,我就可以