Создание Silverlight UserControl - PullRequest
1 голос
/ 23 января 2010

Я создаю пользовательский элемент управления silverlight, который я могу перетаскивать с помощью blend. Но этот элемент управления должен принимать карту, которая уже находится на странице.

Например,

  1. Main.xaml содержит элемент управления картой.
  2. MapEditor.xaml содержит кнопки и другие элементы управления. В файле .cs ему необходим доступ к элементу управления картой (тот, что в Main.xaml).

Как мне это сделать?

Я думал о добавлении параметра в конструктор для MapEditor, но как мне передать карту в качестве параметра в режиме разработки?

Спасибо.

пс. Я собираюсь разбить этот элемент управления на библиотеку silverlight, чтобы его можно было использовать в нескольких проектах позже.

1 Ответ

1 голос
/ 24 января 2010

Вы не хотите передавать свой элемент управления параметризованному конструктору, XAML будет создавать типы только с использованием их конструктора по умолчанию.

Простой подход

Самый простой подход - добавить DependencyProperty к вашему элементу управления, которому вы бы присвоили элемент управления Map (в этом примере я буду использовать имя типа MyMap): -

public MyMap Map
{
    get { return (MyMap)GetValue(MapProperty); }
    set { SetValue(MapProperty, value); }
}

public static DependencyPropery MapProperty = new DependencyProperty("Map",
    typeof(MyMap), typeof(MapEditor), new PropertyMetaData(null));

Теперь в Blend свойство Map появится в категории Разное на вкладке Свойства. Затем можно использовать вкладку «Свойство элемента» в «Создать привязку данных», чтобы выбрать элемент управления «Карта», к которому он должен быть привязан.

Подход с жестким ядром

При этом я был бы склонен создать надлежащий настраиваемый элемент управления, следуя этим рекомендациям Создание нового элемента управления путем создания шаблона ControlTemplate . Кроме того, я бы расширил базовый класс ContentControl и включил ContentPresenter в сердце шаблона. Элемент управления будет исходить из предположения, что дочерний элемент управления является MyMap элементом управления.

Этот подход позволяет стилизовать весь внешний вид элемента управления MapEditor в Blend и позволяет элементу «Карта», который должен быть «отредактирован», перетаскиваться на MapEditor как дочерний элемент управления. *

...