Не искате да давате на контрола си параметризиран конструктор, 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