自定义一个toolbar,你希望像arcgis自带的Navigation那个
<esriToolkit:Navigation Map="{Binding ElementName=MyMap}"></esriToolkit:Navigation>
Map="{Binding ElementName=MyMap}"这种方式去实现控件绑定的话,
要使用到silverlight的DependencyProperty的这个东西
DependencyProperty 的使用方法具体可以查看http://www.cnblogs.com/yjmyzz/archive/2009/12/23/1630526.html
这个高人写的,
你自定义一个toolbar控件,该控件要实现放大,缩小,平移,全屏,放大镜等常用gis的功能,你希望通过
像自带的Navigation控件那样实现控件绑定,
你自定义了一个toolbar的控件,你也是同过Map属性来绑定Map="{Binding ElementName=MyMap}"控件的话
在后台代码里写上
propdp 在敲两下tab键,自动会出现
public int MyProperty
{
get { return (int)GetValue(MyPropertyProperty); }
set { SetValue(MyPropertyProperty, value); }
}
{
get { return (int)GetValue(MyPropertyProperty); }
set { SetValue(MyPropertyProperty, value); }
}
// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new UIPropertyMetadata(0));
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new UIPropertyMetadata(0));
当然是修改这个代码了,把MyProperty 改为Map,你仔细观察,系统会自动把这个代码不会的Myroperty都自动修改为Map
接下来是修改你的属性类型,你传递的是Map控件对象,需要把int改为 ESRI.ArcGIS.Client.Map,
get { return (ESRI.ArcGIS.Client.Map)GetValue(MapProperty); }这里会自动修改,
DependencyProperty.Register("MyProperty", typeof(ESRI.ArcGIS.Client.Map), typeof(ownerclass), new UIPropertyMetadata(0));
关键是修改这里,通过查看msdn了解DependencyProperty.Register使用方法,
名称 | 说明 | |
---|---|---|
Register(String, Type, Type) | 使用指定的属性名称、属性类型和所有者类型注册依赖项属性。 | |
Register(String, Type, Type, PropertyMetadata) | 使用指定的属性名称、属性类型、所有者类型和属性元数据注册依赖项属性。 | |
Register(String, Type, Type, PropertyMetadata, ValidateValueCallback) | 使用指定的属性名称、属性类型、所有者类型、属性元数据和属性的值验证回调来注册依赖项属性。 |
很好理解 的,
DependencyProperty.Register("Map", typeof(ESRI.ArcGIS.Client.Map), typeof(toolbar), new PropertyMetadata(new ESRI.ArcGIS.Client.Map(),new PropertyChangedCallback(OnMapPropertyChanged)));
Map属性名,ESRI.ArcGIS.Client.Map属性类型,toolbar类名,new ESRI.ArcGIS.Client.Map(),默认对象,可以设置为null
OnMapPropertyChanged值设置后调用的函数
private static void OnMapPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
toolbar ctl = d as toolbar;
ESRI.ArcGIS.Client.Map map = d.GetValue(toolbar.MapProperty) as ESRI.ArcGIS.Client.Map;
}