2011-10-03 14 views
1

有人可以幫助我解決這個問題嗎?)在My XAML中我有Listbox元素。我想我的用戶屬性添加到它(在我的情況 - ConnectorStyle)如何在SilverLight中爲元素創建屬性

我的XAML代碼:

<ListBox ItemsSource="{Binding Nodes}" ItemsPanel="{StaticResource CanvasItemsPanelTemplate}" 
       ItemTemplate="{StaticResource NodePictureTemplate}" 
       ItemContainerStyle="{StaticResource CanvasItemStyle}" 
       ConnectorStyle="{StaticResource ConnectorLineStyle}"/> 

在我的模型我已經準備這個屬性:

public partial class MainPage : UserControl 
    { 
     public static readonly DependencyProperty ConnectorStyleProperty = DependencyProperty.Register(
              "ConnectorStyle", typeof(Style), typeof(NodePicture), null); 
     public MainPage() 
     { 

      InitializeComponent(); 

        } 
     public Style ConnectorStyle 
     { 
      get { return (Style)GetValue(ConnectorStyleProperty); } 
      set { SetValue(ConnectorStyleProperty, value); } 
     } 
    } 

但我是一個錯誤 - 無法解析ConnectorStyle。 有沒有一個簡單的(或正確的方法)做到這一點?

+0

我想提一提,你在這裏展示的代碼從技術上講不是你的模型可能是很重要的,它被命名爲「的MainPage」您的用戶控件類的代碼,所以即使它是C#代碼,這仍然是你的看法。模型(或視圖模型)將成爲「節點」生活的地方:也就是你所綁定的類。我只提到它,因爲這可能有助於說明爲什麼您創建的屬性對ListBox不可見。 – Murven

回答

5

有兩種方法可以做到這一點:您可以爲ListBox添加DependencyProperty的子類,也可以編寫附加屬性。

在你的情況下,你可能想編寫一個添加屬性的子類。嘗試是這樣的:

public class MyListBox : ListBox 
{ 
    public static readonly DependencyProperty ConnectorStyleProperty = DependencyProperty.Register(
     "ConnectorStyle", typeof(Style), typeof(MyListBox), null); 
    public Style ConnectorStyle 
    { 
     get { return (Style)GetValue(ConnectorStyleProperty); } 
     set { SetValue(ConnectorStyleProperty, value); } 
    } 

} 

這將添加一個新的類型列表框,你可以在你的XAML代碼添加。它將具有與常規ListBox相同的屬性,但它也具有ConnectorStyle屬性。

如果您需要響應對列表框中ConnectorStyle屬性的更改,則應該更改Dependency Property的代碼,但這不在此問題的範圍之內。

而在XAML是建議立即進行刪除是:

<local:ListBoxEx 
      ConnectorStyle="{StaticResource ConnectorLineStyle}"/> 
+0

謝謝@Rune Grimstad,但在答案中有一些更新 – revolutionkpi

+0

代碼中有錯誤。它有一個不正確的屬性返回類型。現在修復。 –

相關問題