在Windows 8.1应用程序中,控制模板中的多边形抛出了奇怪的异常

本文关键字:多边形 异常 Windows 应用程序 控制 | 更新日期: 2023-09-27 18:06:48

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

我遇到的问题是当试图应用包含多边形的ControlTemplate(所有其他内容工作OK)。

这是有问题的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>

正如我所提到的,如果我删除多边形,它会完美地呈现,但多边形会把一切都搞砸,它会抛出以下异常:

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

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

任何想法?

谢谢

在Windows 8.1应用程序中,控制模板中的多边形抛出了奇怪的异常

该消息看起来相当令人困惑,但是您的Points集合中所有的逗号和空格都没有小数点(在XAML中使用句点字符- '.'完成)也是如此。通常使用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

…看看这是否能解决问题。