Silverlight Style Setter не может видеть собственность - PullRequest
1 голос
/ 16 ноября 2011

Я пытаюсь применить стиль к MapPolyline из классов Silverlight Bing Maps.

Я определил этот стиль:

<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».

Что противоречит этому:

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>

Но все же получил:

Свойство 'Stroke' не найдено в типе 'Microsoft.Maps.MapControl.Core.MapShapeBase'.

Я что-то упускаю из виду?

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Stroke и StrokeThickness не поддерживаются DependencyProperties, определенными для этого класса.Внутренне они используют свойства Stroke (Thickness) класса Shape.Одним из вариантов будет определение собственного присоединенного DependencyProperty для каждого, и в PropertyChangeCallback вы можете использовать DP связанного класса Shape для установки значения объекта.Недостатком является локальное значение (а не значение стиля), но оно должно работать для базовых сценариев.например,

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
}
1 голос
/ 16 ноября 2011

Stroke и StrokeThickness не являются свойствами зависимостей и поэтому не будут доступны внутри стиля или шаблона.Эти 2 свойства одинаково не-dp во всем WPF.

В качестве обходного пути вы можете создать свой собственный производный класс, такой как MapPolyLineEx из класса MapPolyLine, вы можете создать реализации new (используя скрытиеособенность члена базового класса C #) Stroke и StrokeThickness как свойства зависимости

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...