Я пишу контрольную библиотеку.В этой библиотеке есть несколько пользовательских панелей, которые заполнены пользовательскими UIElements.Поскольку каждый дочерний элемент в моей библиотеке должен иметь свойство «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>
, будет выдано исключение: «Binding» не может быть установлен для «SetTitle»свойство типа «Метка». «Связывание» может быть установлено только для свойства DependencyProperty объекта DependencyObject. "
Чего мне не хватает?Привязка работает нормально, если вместо привязки к «Имени» я привязываю к какому-либо другому прикрепленному свойству, определенному в MyLibCommonProperties.
Заранее спасибо.