1

Я пытаюсь использовать способ повторного использования векторной графики во всех приложениях. Мой нынешний подход - иметь графику в UserControls, он отлично работает, но мне это не нравится. Я пытаюсь установить графику с помощью ControlTemplates, с этой целью я создал пустой «BlankControl», который наследует Control, и ничего не делает (пока).Полигон внутри ControlTemplate бросает странное исключение в Windows 8.1 app

Проблема, с которой я столкнулась, заключается в попытке применить контрольную таблицу, содержащую многоугольник (все остальные работы работают нормально).

Это проблематично 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, он отображает ОК, поэтому проблема кроется в ControlTemplate.

Любые идеи?

Спасибо

+0

Нет решения, да? Dang. Это то же самое в Windows UWP. –

+0

Разочаровавшись, я ожидал, что UWP будет менее дерьмовым, чем WinRT. –

+0

Это потому, что вы думаете о них как о двух разных вещах. Только один. –

ответ

0

Сообщение кажется довольно странным, но так же коллекция ваших очков со всеми запятыми и пробелами и без десятичной точки (которые в XAML совершающейся с использованием периода символа - «»). Как правило, вы используете элемент Path и устанавливаете его свойство Data в геометрию, используя разметку мини-языка, используемую для векторной графики в xaml. Это выглядит простое введение: 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 

... чтобы увидеть, если это устраняет проблему.

+0

Все эти холсты, дорожки и полигоны были автоматически сгенерированы из файла SVG от Inkscape, и это не в моих интересах изменить это. Но независимо от того, если я возьму полигон вне шаблона управления, он отлично отобразится (и выглядит нормально в UserControl), поэтому это не должно быть проблемой с нотацией или точками. Ах! Кроме того, я пробовал использовать гораздо более простые полигоны, взятые из примеров в Интернете. –

+0

Я хочу сказать, что вам следует избегать использования 'Polygon', поскольку' Path' должно быть достаточным для представления всех геометрий с одной строкой 'Data'. –

+0

Я не хочу тратить время на преобразование SVG в Path, поэтому я просто беру то, что дает Inkscape. Достаточно того, что SVG, невероятно, не поддерживается напрямую из XAML, и мне нужно тратить время на его преобразование.Я попытался изменить то, что вы предложили, удалив запятую, не работал. –