2011-11-11 17 views
9

Bir kontrol kitaplığı yazıyorum. Bu kütüphanede kullanıcı UIElements ile doldurulmuş bazı özel paneller bulunmaktadır. Bunu yazarsanız,Ekli bir özelliği başka bir bağımlılık özelliğine bağlayamıyorum

// 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) 
    { 
     ... 
    } 
} 

Sonra: Benim lib her alt öğe bir "Başlık" özelliği olması gerekir beri, şu yazdım

<dl:HorizontalShelf> 
    <Label dl:MyLibCommonProperties.Title="CustomTitle">1</Label> 
    <Label>1</Label> 
    <Label>2</Label> 
    <Label>3</Label> 
</dl:HorizontalShelf> 

her şey çalışıyor ve özellik belirtilen alır değer, ama bu gibi bazı diğer UIElement DependencyProperty o mülkü bağlamak denerseniz:

<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> 

bir özel durum olacaktır: "bir 'setTitle' mülkiyet ayarlanamaz 'bağlama' 'Etiket' türü. A DependencyObject bir DependencyProperty sadece ayarlanabilir 'Bağlanma'. Adı 'Ben MyLibCommonProperties tanımlanan diğer bazı ekli özelliğine bağlamak"

Ne eksik? Bağlama yerine bağlanabilen eğer iyi çalışıyor görünüyor'.

peşin

teşekkürler.

+0

Merhaba, MyLibCommonProperties DependecyObject –

+1

Sadece bir tahmin kaynaklanıyor olmalı, ama, DependencyObject için Get/SetTitle ilk parametreler değil değişebilir UIElement . Ayrıca, Attache özelliğinizi kaydettirirken, üçüncü parametre, istenen hedef yerine ekli mülkün sahibi olmalıdır. MyLibCommonProperties olarak değiştirin. – dowhilefor

+0

'HorizontalShelf' nedir? Bunun yerine StackPanel veya benzeri yerleşik kontrolde denediniz mi? Her şey iyi görünüyor. 'HorizontalShelf', çocuklarını mantıksal çocuklar olarak tanıyan özel bir kontrol olduğunu varsayabilirim. Buraya bakın: http://kentb.blogspot.com/2008/10/customizing-logical-children.html –

cevap

13

Ben bağlayıcı örtülü üst sınıf özelliğine kullanır çünkü olabileceğini düşünüyorum MyLibCommonProperties

public static readonly DependencyProperty TitleProperty = 
    DependencyProperty.RegisterAttached( 
     "Title", 
     typeof(String), 
     typeof(MyLibCommonProperties), // Change this line 
     new FrameworkPropertyMetadata(
      "NoTitle", new PropertyChangedCallback(OnTitleChanged)) 
     ); 

için DependencyProperty tanımında UIElement değiştirin SetTitle() numaralı telefonu arayacak şekilde ayarlanmışsa, MyLibCommonProperties.SetTitle()

yerine Label.SetTitle() çağırıyordum, bazı özel TextBox özellikleriyle aynı sorunu yaşadım. Ben typeof(TextBox) kullandıysanız o zaman değeri bağlamak değil, ama ben o zaman typeof(TextBoxHelpers) kullanılırsa ben

+1

+1 Fantastik! Teşekkürler – Trap

+0

benim için de çalışıyor. Teşekkürler – IFink

İlgili konular