设计MapPolygon的样式

时间:2012-02-05 03:46:52

标签: silverlight windows-phone-7 bing-maps

我打算为Style创建MapPolygon,但我似乎无法为从Setter继承的属性添加Control,因为MapPolygon实际上并没有使用这些属性中的许多属性,所以没有多大帮助。

我主要希望能够设置FillStrokeStrokeThickness属性的样式。但是,当我尝试这样做时,我收到以下错误:“对象引用未设置为对象的实例”。我是否正确认为这是因为我尝试设置的属性不是依赖属性(DependencyProperty)?

如果我的想法确实正确,那么解决此问题的最简单方法是创建自定义MapPolygon控件并为FillStroke和{{创建依赖项属性1}}?

如果我需要澄清一些事情,请告诉我。

更新

StrokeThickness

public class StyledMapPolygon : MapPolygon {
    public static readonly DependencyProperty FillProperty =
       DependencyProperty.Register("Fill", typeof(Brush), typeof(StyledMapPolygon),
       new PropertyMetadata(new SolidColorBrush(), new PropertyChangedCallback(OnFillChanged)));

    private static void OnFillChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
        StyledMapPolygon instance = (StyledMapPolygon) d;
        instance.Fill = e.NewValue as Brush;
    }
}

这只是我想要使用的样式的简化版本。 <Style x:Key="CustomStyle" TargetType="exts:StyledMapPolygon"> <Setter Property="Fill" Value="{StaticResource BuildingFillBrush}" /> </Style> 是我创建的继承自StyledMapPolygon的对象。唯一的区别是我为“填充”创建了一个MapPolygon,它只是映射到基本属性。

上述错误仍显示在DependencyProperty内的“填充”中,但现在可以正常显示(在手机上正确显示)。我可以忍受错误,因为它仍在运行,但我非常希望我的应用程序没有错误。

1 个答案:

答案 0 :(得分:1)

是的,属性必须是DependencyProperty才能通过样式设置。

添加自己的依赖属性包装基类的属性并没有错,但我不建议尝试使用相同的属性名称。使用属性更改处理程序创建一个名称不同的属性,该处理程序将中继设置为基础属性的值。

当然如果&#34;错误&#34;你提到的是Intellisense,只要代码编译并运行,就没有理由关心它。