在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。
任何想法?
谢谢
该消息看起来相当令人困惑,但是您的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
…看看这是否能解决问题。