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

本文关键字:元素 创建 自己的 属性 SilverLight | 更新日期: 2023-09-27 18:10:28

有人能帮我解决这个问题吗?在我的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。是否有一种简单的(或正确的)方法来做到这一点?

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

有两种方法可以做到这一点:你可以为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); }
    }
}

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

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

在XAML中应该是:

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