C# 如何在SilverLight中为元素创建自己的属性

C# 如何在SilverLight中为元素创建自己的属性,c#,asp.net,silverlight,silverlight-4.0,silverlight-3.0,C#,Asp.net,Silverlight,Silverlight 4.0,Silverlight 3.0,有人能帮我回答这个问题吗?)在我的XAML中,我有Listbox元素。我想将我的用户属性添加到其中(在我的示例中为-ConnectorStyle) 我的XAML代码: <ListBox ItemsSource="{Binding Nodes}" ItemsPanel="{StaticResource CanvasItemsPanelTemplate}" ItemTemplate="{StaticResource NodePictureTemplate}"

有人能帮我回答这个问题吗?)在我的XAML中,我有Listbox元素。我想将我的用户属性添加到其中(在我的示例中为-ConnectorStyle)

我的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。
有没有一种简单(或正确的方法)的方法可以做到这一点?

有两种方法可以做到这一点:要么为列表框编写添加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代码中。它将具有与常规列表框相同的所有属性,但也将具有ConnectorStyle属性

如果您需要响应对列表框中ConnectorStyle属性的更改,那么您应该更改Dependency属性的代码,但这超出了本问题的范围

在XAML中,它应该是:

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

有两种方法可以做到这一点:要么为添加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代码中。它将具有与常规列表框相同的所有属性,但也将具有ConnectorStyle属性

如果您需要响应对列表框中ConnectorStyle属性的更改,那么您应该更改Dependency属性的代码,但这超出了本问题的范围

在XAML中,它应该是:

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


谢谢,@Rune Grimstad,但是您的回答中有一些更新,代码中有一个错误。属性的返回类型不正确。现已修复。谢谢,@Rune Grimstad,但您的回答中有一些更新。代码中有一个错误。属性的返回类型不正确。现在已修复。我认为重要的是,这里显示的代码从技术上讲不是您的模型,而是名为“MainPage”的UserControl类的代码,因此即使是C#代码,这仍然是您的观点。模型(或viewmodel)将是“节点”所在的位置:即绑定到的类。我之所以提到它,是因为这可能有助于澄清为什么您创建的属性在列表框中不可见。我认为重要的一点是,从技术上讲,这里显示的代码不是您的模型,而是名为“MainPage”的UserControl类的代码,所以即使它是C#代码,这仍然是您的观点。模型(或viewmodel)将是“节点”所在的位置:即绑定到的类。我之所以提到它,是因为这可能有助于澄清为什么您创建的属性对列表框不可见。