【问题标题】:How to create your own properties for element in SilverLight如何在 SilverLight 中为元素创建自己的属性
【发布时间】:2011-10-03 08:11:24
【问题描述】:

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

【问题讨论】:

  • 我认为可能很重要的一点是,您在这里显示的代码从技术上讲不是您的模型,它是您的名为“MainPage”的 UserControl 类的代码,所以即使它是 C# 代码,这仍然是你的观点。模型(或视图模型)将是“节点”所在的位置:即您绑定到的类。我只提到它是因为这可能有助于澄清为什么您创建的属性对 ListBox 不可见。

标签: c# asp.net silverlight silverlight-4.0 silverlight-3.0


【解决方案1】:

有两种方法可以做到这一点:您可以为添加 DependencyProperty 的 ListBox 编写一个子类,或者您可以编写一个附加属性。

在您的情况下,您可能想要编写一个添加该属性的子类。试试这样的:

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}"/>

【讨论】:

  • 谢谢@Rune Grimstad,但您的回答有一些更新
  • 代码有错误。该属性的返回类型不正确。现已修复。
猜你喜欢
  • 1970-01-01
  • 2017-10-30
  • 2017-02-20
  • 2013-06-19
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多