无法将附加属性绑定到其他依赖项属性

我正在写一个控制库。 在这个库中有一些用户UIElements填充的自定义面板。 由于我的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>

会抛出一个异常:“A'Binding'不能在'Label'类型的'SetTitle'属性上设置,'Binding'只能在DependencyObject的DependencyProperty上设置。

我错过了什么? 绑定似乎工作正常,如果不是绑定到“名称”,而是绑定到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()

我有一些自定义TextBox属性的问题。 如果我使用typeof(TextBox)那么我不能绑定到值,但如果我使用typeof(TextBoxHelpers)那么我可以

链接地址: http://www.djcxy.com/p/44607.html

上一篇: Can't bind an attached property to another dependency property

下一篇: Binding in CustomControl