2009-07-23 3 views
2

У меня есть ресурс, определенный в моем файле Xaml следующим образом:Как клонировать ресурс пути в Silverlight?

<Path x:Key="myPath" 
    Data="M14.773241,18.080208 C12.373256,18.080208 10.239936,19.30687 10.239936,27.573483 
    L10.239936,36.106766 C10.239936,45.440037 12.586588,46.506699 14.986573,46.506699 
    C18.613216,46.506699 19.359879,42.400059 19.359879,35.3601 L19.359879,27.733482 
    C19.359879,20.05353 17.386559,18.080208 14.773241,18.080208 z M14.879907,11.786915 
    C17.973221,11.786915 22.293194,13.013573 24.906511,17.920212 C26.773167,21.386856 
    27.519829,27.093487 27.519829,32.213455 C27.519829,34.506775 27.306496,41.706726 
    24.906511,46.453365 C23.626518,49.013351 20.906536,52.799992 15.199905,52.799992 
    C2.1333201,52.799992 2.1333201,37.600086 2.1333201,32.160122 C2.1333201,28.05348 
    2.1333201,22.666847 4.4266391,18.453541 C5.8666301,15.840225 8.639946,11.786915 
    14.879907,11.786915 z" 
/> 

Я хочу, чтобы иметь возможность добавлять несколько «экземпляров» данного пути (и несколько других) в StackPanel. Конечно, я не могу просто добавить «myPath» к панели, так как она уже является дочерним элементом другого контейнера.

Однако я тоже не могу клонировать путь. Я пробовал:

Path clone = new Path() 
{ 
    Data = source.Data 
}; 

Но не повезло ... исключение из-за значения из ожидаемого диапазона.

Наконец-то я попытался перекопать в source.Data (PathGeometry), но не содержит PathFigures ... Я понятия не имею, почему, поскольку Path делает рендеринг, если я скопирую его из раздела ресурсов в панель напрямую.

Что дает?

Спасибо, Sergio

ответ

11

Поместите данные пути в струнном ресурсе:

<Page.Resources> 
    <system:String x:Key="PathData"> 
    M14.773241,18.080208 C12.373256,18.080208 10.239936,19.30687 10.239936,27.573483 
    L10.239936,36.106766 C10.239936,45.440037 12.586588,46.506699 14.986573,46.506699 
    C18.613216,46.506699 19.359879,42.400059 19.359879,35.3601 L19.359879,27.733482 
    C19.359879,20.05353 17.386559,18.080208 14.773241,18.080208 z M14.879907,11.786915 
    C17.973221,11.786915 22.293194,13.013573 24.906511,17.920212 C26.773167,21.386856 
    27.519829,27.093487 27.519829,32.213455 C27.519829,34.506775 27.306496,41.706726 
    24.906511,46.453365 C23.626518,49.013351 20.906536,52.799992 15.199905,52.799992 
    C2.1333201,52.799992 2.1333201,37.600086 2.1333201,32.160122 C2.1333201,28.05348 
    2.1333201,22.666847 4.4266391,18.453541 C5.8666301,15.840225 8.639946,11.786915 
    14.879907,11.786915 z 
    </system:String> 
</Page.Resources> 

И использовать его:

<Path x:Name="Path1" Data="{StaticResource PathData}" Fill="Blue" ... /> 
<Path x:Name="Path2" Data="{StaticResource PathData}" Fill="Red" ... /> 

Вам нужно это в вашем объявлении XAML:

xmlns:system="clr-namespace:System;assembly=mscorlib" 

Если вы хотите создать пути программно, используя общую строку пути, Silverlight отсутствует немного ключевых функциональных возможностей, WPF имеет - так что вы должны клудж его:

string pathXaml = 
@"<Path xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" 
     xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" 
     Data=""path_data_goes_here"" />"; 
Path path = (Path)System.Windows.Markup.XamlReader.Load(pathXaml); 
+0

Вы можете установить свойство данных с использованием программно, что техника? – SergioL

+0

Обновлен с помощью способа сделать то, что вам нужно. –

+0

Это сделало трюк ... Я вижу другой раздел, который я пишу в своем документе WPF v. Silverlight. :-) – SergioL