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