我正在尝试从bing map silverlight类中将样式应用于MapPolyline。
我定义了这种风格:
<Style x:Key="routeStyle" TargetType="map:MapPolyline">
<Setter Property="Stroke">
<Setter.Value>
<SolidColorBrush Color="Magenta" />
</Setter.Value>
</Setter>
<Setter Property="StrokeThickness" Value="10" />
</Style>
运行时出现此错误:
在'Microsoft.Maps.MapControl.MapPolyline'类型中找不到属性'Stroke'。
与此相反:
http://msdn.microsoft.com/en-us/library/microsoft.maps.mapcontrol.mappolyline_members.aspx
我想知道是否可能正在努力寻找属性,因为它是在基类中声明的。所以我尝试了这个:
<Style x:Key="routeStyle" TargetType="mapCore:MapShapeBase">
<Setter Property="Stroke">
<Setter.Value>
<SolidColorBrush Color="Magenta" />
</Setter.Value>
</Setter>
<Setter Property="StrokeThickness" Value="10" />
</Style>
但仍然有:
在'Microsoft.Maps.MapControl.Core.MapShapeBase'类型中找不到属性'Stroke'。
我错过了一些明显的东西吗?
答案 0 :(得分:1)
Stroke
和StrokeThickness
不是依赖项属性,因此在样式或模板中不可用。这两个属性在整个WPF中都是统一的非dp。
作为一种解决方法,您可以从MapPolyLineEx
类创建自己的派生类,例如MapPolyLine
,您可以创建new
实现(使用隐藏C#的基类成员功能) Stroke
和StrokeThickness
作为依赖属性
答案 1 :(得分:1)
Stroke和StrokeThickness不受为该类定义的DependencyProperties的支持。在内部,他们使用Shape类的Stroke(Thickness)属性字段。一个选项是为每个定义您自己的DependencyProperty,在PropertyChangeCallback中,您可以使用关联的Shape类的DP来设置对象的值。这将成为本地值(而不是样式值)的缺点,但它应该适用于基本场景。 e.g。
public static class ShapeExtensions
{
#region Stroke
public static readonly DependencyProperty StrokeProperty =
DependencyProperty.RegisterAttached("Stroke", typeof(Brush), typeof(ShapeExtensions),
new PropertyMetadata((Brush)null, new PropertyChangedCallback(OnStrokeChanged)));
public static Brush GetStroke(DependencyObject d)
{
return (Brush)d.GetValue(StrokeProperty);
}
public static void SetStroke(DependencyObject d, Brush value)
{
d.SetValue(StrokeProperty, value);
}
private static void OnStrokeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
d.SetValue(Shape.StrokeProperty, e.NewValue);
}
#endregion // Stroke
}