我有一个Microsoft.Phone.Controls.Maps.Map地图控件(Windows 7中的旧Bing地图作为新的Bing地图不能满足我的需求)。

我以编程方式向其中添加了带有Line的Canvas控件。一切正常时

<Line ... Stroke="{StaticResource PhoneForegroundBrush}" />


但是如果我将笔触更改为PhoneAccentColor,则会发生未处理的异常

<Line ... Stroke="{StaticResource PhoneAccentColor}" />


这是未处理异常的堆栈跟踪:

   at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
   at MS.Internal.XcpImports.UIElement_Measure(UIElement element, Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at Microsoft.Phone.Controls.Maps.MapLayer.MeasureOverride(Size availableSize)
   at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Double inWidth, Double inHeight, Double& outWidth, Double& outHeight)


任何想法可能是什么问题?

如果相关,我的代码:

<UserControl.Resources>
    <ResourceDictionary>

        <DataTemplate x:Key="MyTemplate">
            <Canvas Height="300" Width="300" HorizontalAlignment="Center" VerticalAlignment="Center">
                <Line X1="150" X2="150" Y1="0" Y2="130" Stroke="{StaticResource PhoneAccentColor}" Margin="0"/>
            </Canvas>
        </DataTemplate>

    </ResourceDictionary>
</UserControl.Resources>


和使用它的C#:

ContentControl content = new ContentControl();
content.ContentTemplate = (DataTemplate)Resources["MyTemplate"];
Viewbox viewbox = new Viewbox();
viewbox.Width = 300;
viewbox.Height = 300;
viewbox.Child = content;
Map.Children.Add(viewbox);

最佳答案

您应该使用PhoneAccentBrush而不是PhoneAccentColor。因为PhoneAccentColor是typeof Color。但是描边需要的类型是画笔。

<Line ... Stroke="{StaticResource PhoneAccentBrush}" />


或将Stroke定义为SolidColorBrush并使用PhoneAccentColor设置颜色:

<Line>
    <Line.Stroke>
        <SolidColorBrush Color="{StaticResource PhoneAccentColor}"/>
    </Line.Stroke>
</Line>

09-06 04:57