代码之家  ›  专栏  ›  技术社区  ›  SergioL

如何在Silverlight中克隆路径资源?

  •  2
  • SergioL  · 技术社区  · 16 年前

    我在XAML文件中定义了一个资源,如下所示:

     <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(路径几何体),但它不包含路径图……我不知道为什么,因为如果我将路径从资源部分直接复制到面板,路径就会呈现出来。

    给出了什么?

    谢谢, 塞尔焦

    1 回复  |  直到 16 年前
        1
  •  11
  •   Ben M    16 年前

    将路径数据放入字符串资源:

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