我打算为Style
创建MapPolygon
,但我似乎无法为从Setter
继承的属性添加Control
,因为MapPolygon实际上并没有使用这些属性中的许多属性,所以没有多大帮助。
我主要希望能够设置Fill
,Stroke
和StrokeThickness
属性的样式。但是,当我尝试这样做时,我收到以下错误:“对象引用未设置为对象的实例”。我是否正确认为这是因为我尝试设置的属性不是依赖属性(DependencyProperty
)?
如果我的想法确实正确,那么解决此问题的最简单方法是创建自定义MapPolygon
控件并为Fill
,Stroke
和{{创建依赖项属性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
内的“填充”中,但现在可以正常显示(在手机上正确显示)。我可以忍受错误,因为它仍在运行,但我非常希望我的应用程序没有错误。
答案 0 :(得分:1)
是的,属性必须是DependencyProperty
才能通过样式设置。
添加自己的依赖属性包装基类的属性并没有错,但我不建议尝试使用相同的属性名称。使用属性更改处理程序创建一个名称不同的属性,该处理程序将中继设置为基础属性的值。
当然如果&#34;错误&#34;你提到的是Intellisense,只要代码编译并运行,就没有理由关心它。