我正在创建一个silverlight用户控件,我应该能够通过混合拖放。但是此控件需要接受页面上已有的地图。
例如。
如何完成这项工作?
我在考虑在MapEditor的构造函数中添加一个参数,但是如何在设计模式中将地图作为参数传递?
感谢。
PS。我打算将这个控件分解为一个silverlight库,以便以后可以在多个项目中使用。
答案 0 :(得分: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
属性将出现在“属性”选项卡的“其他”类别中。然后,您可以使用“创建数据绑定”的“元素属性”选项卡来选择它应绑定到的地图控件。
硬核方法
那就是说我倾向于按照这些指导原则构建一个适当的可自定义控件Creating a New Control by Creating a ControlTemplate。除此之外,我将扩展ContentControl
基类并在模板的核心包含ContentPresenter
。控件将假设子控件是MyMap
控件。
这种方法允许在Blend中设置MapEditor
控件的整个外观,并允许将“编辑”的Map控件作为子项拖放到MapEditor
上控制。