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