Создание Silverlight UserControl

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

Например,

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

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

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

Спасибо.

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


person Shawn Mclean    schedule 23.01.2010    source источник


Ответы (1)


Вы не хотите предоставлять своему элементу управления параметризованный конструктор, 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 и позволяет элементу управления Map, который должен быть «отредактирован», перетаскиваться на MapEditor в качестве дочернего элемента управления.

person AnthonyWJones    schedule 23.01.2010
comment
В последней строке что такое MyControl в функции typeof (MyControl)? - person Shawn Mclean; 03.02.2010
comment
@Shawn: Извини, мне нужно было вставить MapEditor, чтобы было понятно. В этом параметре вы указываете тип элемента управления, с которым связано свойство зависимости. Это позволяет различным элементам управления регистрировать свойства с одним и тем же именем (без этого только один элемент управления мог бы иметь свойство Text, чего никогда не было бы). Я отредактирую. - person AnthonyWJones; 03.02.2010
comment
Здравствуйте, еще один вопрос, как выглядит xaml для нового элемента управления со свойством Map с точки зрения передачи ему объекта карты? - person Shawn Mclean; 04.02.2010
comment
@Shawn: Это хороший вопрос сам по себе, однако, поскольку элемент управления Map уже существует в вашем XAML в другом месте, я предполагаю, что вы хотите привязаться к нему. Предположим, ваш Map имеет x:Name="MyMap". Следовательно, ваше Map свойство будет выглядеть как Map="{Binding ElementName=MyMap}" - person AnthonyWJones; 04.02.2010