2011-11-16 72 views
1

我想從bing地圖silverlight類應用一個樣式到MapPolyline。Silverlight樣式二傳手不能看到屬性

我已經定義了這種風格:

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

但仍然有:

屬性 '撫摸' 型未找到 'Microsoft.Maps.MapControl.Core.MapShapeBase'。

我是否缺少明顯的東西?

+0

從那個鏈接我看不到任何公開的Stroke或StrokeThickness MapPolyline或MapShapeBase上的DependencyProperty。你確定這是一個依賴屬性嗎? – AndrewS

+0

該控件似乎使用Shape類'DP,所以我懷疑是這個問題。你可能能夠做一些像Property =「Shape.StrokeProperty」的東西。 – AndrewS

+0

啊哈。 我在看這個文檔,並沒有提到任何關於DP的選擇。 http://msdn.microsoft.com/en-us/library/system.windows.style.setters(v=vs.95).aspx 當然,當你仔細閱讀特定文檔時,它會提到它必須是DP: http://msdn.microsoft.com/en-us/library/system.windows.setter.property(v=vs.95).aspx – AndyJ

回答

1

Stroke和StrokeThickness不支持爲該類定義的DependencyProperties。他們在內部使用Shape類的Stroke(Thickness)屬性字段。一種選擇是爲每個屬性定義您自己的附加DependencyProperty,並在PropertyChangeCallback中使用關聯的Shape類的DP來設置對象上的值。這將有一個本地值(而不是風格值)的缺點,但它應該適用於基本場景。例如

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 
} 
+0

這正是我一直試圖發佈的工作,因爲我想出了答案。不幸的堆棧溢出不會讓我自己回答另外6個小時......但幸運的是,你已經提供了所有人都看到:)非常感謝指針! – AndyJ

1

StrokeStrokeThickness不是依賴項屬性,因此在樣式或模板中不可用。這兩個屬性在整個WPF中都是一致的非dp。

作爲一種變通方法,可以創建自己的派生類如MapPolyLineExMapPolyLine類,可以創建new實現(使用隱藏的C#基類成員功能)的StrokeStrokeThickness作爲依賴屬性