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

rev*_*kpi 1 c# asp.net silverlight silverlight-3.0 silverlight-4.0

有人可以帮我解决这个问题吗?)在我的XAML中我有Listbox元素.我想将我的用户属性添加到它(在我的情况下 - ConnectorStyle)

我的XAML代码:

<ListBox ItemsSource="{Binding Nodes}" ItemsPanel="{StaticResource CanvasItemsPanelTemplate}" 
                 ItemTemplate="{StaticResource NodePictureTemplate}" 
               ItemContainerStyle="{StaticResource CanvasItemStyle}" 
                ConnectorStyle="{StaticResource ConnectorLineStyle}"/>
Run Code Online (Sandbox Code Playgroud)

在我的模型中,我准备了这个属性:

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); }
        }
    }
Run Code Online (Sandbox Code Playgroud)

但我错了 - 无法解析ConnectorStyle.这样做有简单(或正确的方法)吗?

Run*_*tad 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); }
    }

}
Run Code Online (Sandbox Code Playgroud)

这将添加一个新类型的ListBox,您可以在xaml代码中添加它.它将具有与常规ListBox相同的所有属性,但它也将具有ConnectorStyle属性.

如果需要响应列表框中ConnectorStyle属性的更改,则应更改依赖项属性的代码,但这超出了此问题的范围.

在XAML中它应该是:

<local:ListBoxEx 
             ConnectorStyle="{StaticResource ConnectorLineStyle}"/>
Run Code Online (Sandbox Code Playgroud)