2009-07-23 29 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 
}; 

,但沒有運氣...約值的例外是把預期範圍。我不知道爲什麼,因爲如果我直接從資源部分複製它到面板,Path會渲染它。我不知道爲什麼,因爲如果我將它從資源部分直接複製到面板,我不知道爲什麼。

什麼給?

感謝, 塞爾吉奧

回答

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 2009-07-23 18:57:06