0

我創建了一個名爲TagItem的UserControl類,它目前只包含一個名爲mainButton的Button。具有依賴項屬性的用戶控件

它有一個名爲DisplayedTag的依賴屬性,它是標記類型(一個包含關於我的標記的簡單類)。我的目標是,當用戶從XAML設置DisplayedTag時,mainButton的文本應該更新爲Tag的TagName。

在TagItem代碼:

public Tag DisplayedTag 
    { 
     get { return (Tag)GetValue(DisplayedTagProperty); } 
     set 
     { 
      SetValue(DisplayedTagProperty, value); 
     } 
    } 

    // Using a DependencyProperty as the backing store for MyProperty. 
    // This enables animation, styling, binding, etc... 
    public static DependencyProperty DisplayedTagProperty = 
     DependencyProperty.Register("DisplayedTag", 
      typeof(Tag), 
      typeof(TagItem), 
      new PropertyMetadata(new Tag(), 
       OnDisplayedTagPropertyChanged)); 


    private static void OnDisplayedTagPropertyChanged(DependencyObject source, 
     DependencyPropertyChangedEventArgs e) 
    { 
     // Put some update logic here... 

     Tag tag = (Tag)e.NewValue; 
     mainButton.Content = tag.TagName; 

    } 

在XAML:

<local:TagItem DisplayedTag="{Binding}"/> 

這不起作用,因爲OnDisplayedTagPropertyChanged是靜態的,而mainButton不是。我可能在這裏完全錯誤的軌道上,並會真正感謝解決簡單問題的一些方向。

回答

2

OnDisplayedTagPropertyChanged回調的source參數中,您將獲得UserControl派生的控件。你只需要投它,這樣你就可以訪問其成員mainButton

我把任何名稱爲您的類(不知道如果一切是正確的):

private static void OnDisplayedTagPropertyChanged(DependencyObject source, 
    DependencyPropertyChangedEventArgs e) 
{ 
    MyUserControl ctrl = source as MyUserControl; 
    if(ctrl == null) // should not happen 
     return; 

    Button b = ctrl.mainButton; 

    Tag tag = (Tag)e.NewValue; 
    mainButton.Content = tag.TagName; 

} 
+0

好吧我只是想一點點... – Fratyx 2014-10-16 10:11:13

相關問題