Как создать свои собственные свойства для элемента в SilverLight - PullRequest
1 голос
/ 03 октября 2011

Может кто-нибудь помочь мне с этим вопросом?) В моем 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.Есть ли простой (или правильный) способ сделать это?

1 Ответ

5 голосов
/ 03 октября 2011

Есть два способа сделать это: либо вы можете написать подкласс для 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 в вашем списке, вам следует изменить код свойства зависимости, но это выходит за рамки этого вопроса.

А в XAML это должно быть:

<local:ListBoxEx 
             ConnectorStyle="{StaticResource ConnectorLineStyle}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...