2011-02-02 37 views
5

Chcę mieć płótno w Xaml, gdzie umieścić niektóre ikony. Ikony te są wielokąty jak ten:Wielokrotnego użytku wielokąt

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

Ale chcę użyć ikony kilka razy, więc chcę, aby zdefiniować go w zasobach i umieścić go poprzez odniesienie do płótnie w określonym położeniu, jakoś tak :

<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> 

Znalazłem możliwe rozwiązanie na http://www.codeproject.com/KB/WPF/GraphicInXAMLAndWPF.aspx gdzie wielokąty są przechowywane w obrazie rysunku, ale wydaje się być dużo napowietrznych.

Ktoś ma lepszy pomysł, jak rozwiązać ten problem?

Odpowiedz

7

Prawdopodobnie najbardziej oczywistą i elastyczną metodą jest utworzenie UserControl. Możesz dodać nowy plik typu UserControl z eksploratora rozwiązań, dodaj swój wielokąt do siatki "LayoutRoot" tworzonej przez Visual Studio. Następnie możesz utworzyć tyle instancji, ile chcesz w swojej kontroli użytkownika!

Jednak sprawdzając podobne problemy w SO, można użyć kontroli treści do renderowania wielokąta, należy pamiętać, że trzeba użyć x: Shared = "false", aby upewnić się, że nie próbujesz ponownie użyć ten sam wielokąt za każdym razem.

<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> 

zobacz:

+0

już myślałem o tym, ale myślę, że musi być prostsze rozwiązanie przy mniejszym obciążeniu. To tylko mały wielokąt. – SpeziFish

+0

Wyświetl moją zaktualizowaną odpowiedź - mam nadzieję, że to pomoże! – ColinE

+0

Wow, bardzo ładne, dokładnie to, czego szukałem, dzięki! – SpeziFish

Powiązane problemy