silverlight,C#,为XAML添加了额外的控件
本文关键字:控件 添加 XAML silverlight | 更新日期: 2023-09-27 18:00:37
正如许多bing地图silverlight开发人员已经知道的那样,bing贴图包含一个名为setview的方法,用于计算贴图的右缩放级别。
我自己用MVVM框架构建了一个地图应用程序。我想对我的地图也使用setview方法。但是,因为我在MVVM中构建了该应用程序,所以在视图模型中使用setview是不好的,因为视图模型对map.xaml 一无所知
我有一个带有地图UI的XAML。我将XAML连接到一个名为mapcontent.cs.的视图模型
在名为mapcontent.cs的视图模型中,我有一个类似的属性:
public LocationRect MapArea {
get { return new LocationRect(new Location(52.716610, 6.921160), new Location(52.718330, 6.925840)); }
}
现在我想使用setview,但这需要MVVM的设置。所以我创建了一个额外的Map类控件:
namespace Markarian.ViewModels.Silverlight.Controls {
/// <summary>
/// Map control class
/// </summary>
public class Map: MC.Map {
/// <summary>
/// Initializes a new instance of the Map class.
/// </summary>
public Map() {
}
/// <summary>
/// gets and sets setview.
/// </summary>
public MC.LocationRect ViewArea { get; set; } <<<setview will come here
}
}
现在的解决方案是,我可以在XAML中使用ViewArea,并将其与MapArea绑定。唯一的问题是我不能在XAML中使用属性Viewarea,有人知道为什么吗?
ViewArea属性必须是DependencyProperty才能支持绑定。您所拥有的只是一个普通的旧CLR属性。
要挂接SetView调用,您必须向依赖项属性添加一个更改处理程序。这篇文章有一个例子/解释,但它会像:
public MC.LocationRect ViewArea {
get { return (MC.LocationRect)GetValue(ViewAreaProperty); }
set { SetValue(ViewAreaProperty, value); }
}
public static readonly DependencyProperty ViewAreaProperty = DependencyProperty.Register("ViewArea", typeof(MC.LocationRect),
typeof(Map), new PropertyMetadata(new MC.LocationRect(), OnViewAreaChanged));
private static void OnViewAreaChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
var map = d as Map;
// Call SetView here
}