Многоразовый многоугольник - PullRequest
5 голосов
/ 02 февраля 2011

Я хочу иметь холст в xaml, где я размещаю некоторые иконки.Эти значки являются многоугольниками, такими как этот:

<Polygon Points="0,0 20,50, 0,50 20,0" Fill="Red" Stretch="Uniform"/>

Но я хочу использовать значок несколько раз, поэтому я хочу определить его в ресурсах и включить его ссылкой на холст в определенной позиции, так или иначекак это:

<Page.Resources>
   <Polygon Key="icon1" Points="0,0 20,50, 0,50 20,0" Fill="Red" Stretch="Uniform"/>
   <Polygon Key="icon2" Points="0,0 10,30, 10,60 20,0" Fill="Blue" Stretch="Uniform"/>
   ...
</Page.Resources>    
<Canvas>
   <Polygon Reference="icon1" X="0" Y="0"/>
   <Polygon Reference="icon2" X="10" Y="10"/>   
   <Polygon Reference="icon1" X="20" Y="20"/>   
   ...          
</Canvas>

Я нашел возможное решение для http://www.codeproject.com/KB/WPF/GraphicInXAMLAndWPF.aspx, где многоугольники хранятся в графическом изображении, но, похоже, слишком много накладных расходов.

лучшая идея, как решить эту проблему?

1 Ответ

7 голосов
/ 02 февраля 2011

Вероятно, наиболее очевидным и гибким способом является создание UserControl. Вы можете добавить новый файл типа UserControl из обозревателя решений, добавить полигон в сетку LayoutRoot, которую создаст Visual Studio. Затем вы можете создать столько экземпляров, сколько захотите, своего пользовательского элемента управления!

Однако, проверяя подобные проблемы в SO, вы можете использовать элемент управления содержимым для визуализации многоугольника. Обратите внимание, что вам придется использовать x: Shared = "false", чтобы убедиться, что вы не пытаетесь использовать его повторно полигон каждый раз.

<Page.Resources>
   <Polygon x:Key="icon1"  x:Shared="False"
            Points="0,0 20,50, 0,50 20,0" Fill="Red" Stretch="Uniform"/>
   <Polygon x:Key="icon2"  x:Shared="False"
            Points="0,0 10,30, 10,60 20,0" Fill="Blue" Stretch="Uniform"/>
   ...
</Page.Resources>    
<Canvas>
    <ContentControl Content="{StaticResource icon1}" Canvas.Top="0" Canvas.Left="0"/>
    <ContentControl Content="{StaticResource icon2}" Canvas.Top="0" Canvas.Left="10"/>
    <ContentControl Content="{StaticResource icon1}" Canvas.Top="0" Canvas.Left="20"/>
   ...          
</Canvas>

См. Следующее:

Векторное изображение как многоразовый фрагмент XAML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...