Стилизация MapPolygon - PullRequest
       4

Стилизация MapPolygon

1 голос
/ 05 февраля 2012

Я собирался создать Style для MapPolygon, но я не могу добавить Setter для чего-либо, кроме свойств, унаследованных от Control, что не очень помогает, так какMapPolygon фактически не использует многие из этих свойств.

В основном я хочу иметь возможность стилизовать свойства Fill, Stroke и StrokeThickness.Однако, когда я пытаюсь сделать это, я получаю следующую ошибку: "Ссылка на объект не установлена ​​для экземпляра объекта" .Правильно ли я считаю, что это потому, что свойства, которые я пытаюсь стилизовать, не являются свойствами зависимостей (DependencyProperty)?

Если мое мышление здесь действительно верно, будет ли самый простой способ решить эту проблему:создайте пользовательский элемент управления MapPolygon и создайте свойства зависимостей для Fill, Stroke и 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 для «Fill», который просто сопоставляется с базовым свойством.

Указанная выше ошибка все еще появляется в «Fill» в Setter, но теперь она работает (правильно отображается на телефоне).Я могу жить с ошибкой, поскольку она все еще работает, но я бы очень хотел, чтобы мое приложение не содержало ошибок.

1 Ответ

1 голос
/ 07 февраля 2012

Да, свойство должно быть DependencyProperty, чтобы быть установленным стилем.

Нет ничего плохого в том, чтобы добавить собственное свойство зависимости, которое переносит свойство в базовый класс, но я бы не советовал пытаться использовать то же имя свойства.Создайте свойство с другим именем, с обработчиком измененного свойства, которое связывает значение, которое установлено с базовым свойством.

Конечно, если упоминаемая вами «ошибка» - Intellisense, на самом деле нет причин для беспокойства, если только кодкомпилируется и запускается.

...