ControlTemplate中的多边形在Windows 8.1应用程序中引发奇怪的异常

时间:2015-08-06 18:19:31

标签: c# windows-runtime windows-store-apps winrt-xaml controltemplate

我试图在我的应用中尝试重用矢量图形。 我目前的方法是在UserControls中使用图形,它工作得很好,但我不喜欢它。 我试图通过ControlTemplates设置图形,为此我创建了一个空的" BlankControl"它继承自Control,并且绝对没有(现在)。

我遇到的问题是在尝试应用包含Polygon的ControlTemplate时(所有其他内容都可以正常工作)。

这是有问题的ControlTemplate:

<ControlTemplate TargetType="sharedcontrols:BlankControl" x:Key="controlTemplate">
                    <Viewbox>
                        <!--This file is compatible with Silverlight-->
                        <Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Name="Capa_1" Width="62.627" Height="63.636" Canvas.Left="0" Canvas.Top="0">
                            <Canvas.RenderTransform>
                                <TranslateTransform X="0" Y="0"/>
                            </Canvas.RenderTransform>
                            <Canvas.Resources/>
                            <!--Unknown tag: metadata-->
                            <!--Unknown tag: sodipodi:namedview-->
                            <Canvas Name="g3">
                                <Canvas Name="g5">
                                    <Canvas Name="g7">
                                        <Ellipse Fill="White" Width="55" Height="55" Canvas.Left="5" Canvas.Top="5"/>
                                        <Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path9" Fill="Blue" Data="M32.55 56.896c-13.674 0-24.795-11.123-24.795-24.795     c0-13.674 11.121-24.795 24.795-24.795s24.795 11.121 24.795 24.795C57.345 45.772 46.224 56.896 32.55 56.896z M32.55 3.101     c-15.994 0-29 13.006-29 29s13.006 29 29 29s29-13.006 29-29S48.544 3.101 32.55 3.101z"/>
                                            <Polygon Points="0,0 8,5, 0,10" Stroke="Black" Fill="Black" />

                                    </Canvas>
                                </Canvas>
                            </Canvas>
                        </Canvas>
                    </Viewbox>
                </ControlTemplate>

正如我所提到的,如果我删除了Polygon,它会完美呈现,但是多边形会使一切变得混乱,它会抛出以下异常:

Error       Unable to cast object of type 'Windows.UI.Xaml.Media.PointCollection' to type 'System.Windows.Media.PointCollection'.   

真的,非常奇怪的错误,似乎认为我传递的PointCollection是另一种类型。更奇怪的是,如果我从ControlTemplate中取出多边形并将其放在XAML上的任何其他位置,它会呈现OK,因此问题在于ControlTemplate。

有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分:0)

这条消息看起来相当令人困惑,但你的Points集合中包含所有逗号和空格以及没有小数点(在XAML中使用句点字符完成 - &#39;。&#39;)。通常,您使用Path元素并使用xaml中用于矢量图形的迷你语言标记将其Data属性设置为几何。这看起来很简单:https://msdn.microsoft.com/en-us/subscriptions/index/cc189041(v=vs.95).aspx

我不会直接使用Polygon元素。理想情况下,您可以在Blend之类的东西中创建几何体,或者使用它来说明一个来自Illustrator文件并将Path元素粘贴到您的XAML中甚至更好 - 将其转换为更适合矢量渲染的字体文件。

在您的情况下,您可以先尝试更改此内容......

0,0 8,5, 0,10

...到此

0,0 8,5 0,10

...看看是否能解决问题。