我正在寫一個控件庫。在這個庫中有一些用戶UIElements填充的自定義面板。因爲在我的lib每個子元素必須有一個「標題」屬性,我寫了下面:無法將附加屬性綁定到其他依賴項屬性
// 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’屬性設置類型'標籤'。 A「綁定」只能DependencyObject的一個DependencyProperty設置。」
我缺少什麼?綁定似乎如果不是綁定到做工精細‘名稱’我綁定到MyLibCommonProperties定義的其它一些附加屬性。
在此先感謝。
嗨,MyLibCommonProperties必須從DependecyObject – 2011-11-11 10:59:36
只是一個猜測得到,但改變你的讀/第一的setTitle參數的DependencyObject,不是的UIElement 。在註冊您的Attache屬性時,第三個參數必須是所附屬性的所有者,而不是所需的目標。將其更改爲MyLibCommonProperties。 – dowhilefor
什麼是'HorizontalShelf'?你是否在'StackPanel'或類似的內置控件中嘗試過?其他一切似乎都很好。我只能假設'HorizontalShelf'是一個自定義控件,它不會將其子項識別爲邏輯子項。看到這裏:http://kentb.blogspot.com/2008/10/customizing-logical-children.html –