#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}"
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. Я думаю, может быть важно упомянуть, что код, который вы показываете здесь, технически говоря, не является вашей моделью, это код вашего класса UserControl с именем «MainPage», поэтому, даже если это код C #, это все равно ваше мнение. Модель (или viewmodel) будет там, где живут «Узлы»: то есть класс, к которому вы привязываетесь. Я упоминаю об этом только потому, что это может помочь прояснить, почему созданное вами свойство не отображается в списке.
Ответ №1:
Это можно сделать двумя способами: либо вы можете написать подкласс для 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); }
}
}
Это добавит новый тип списка, который вы можете добавить в свой код xaml. Он будет иметь все те же свойства, что и обычный ListBox, но он также будет иметь свойство ConnectorStyle .
Если вам нужно реагировать на изменения в свойстве ConnectorStyle в вашем списке, вам следует изменить код для свойства Dependency, но это выходит за рамки этого вопроса.
И в XAML это должно быть :
<local:ListBoxEx
ConnectorStyle="{StaticResource ConnectorLineStyle}"/>
Комментарии:
1. спасибо, @Rune Grimstad, но в вашем ответе есть некоторые обновления
2. В коде была ошибка. У него был неправильный возвращаемый тип для свойства. Исправлено.