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

标签 silverlight path cloning pathgeometry

我的 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(一个 PathGeometry),但它不包含 PathFigures...我不知道为什么,因为如果我将它从资源部分直接复制到面板,路径确实会呈现。

什么给了?

谢谢, 塞尔吉奥

最佳答案

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

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

如果您想使用公共(public)路径字符串以编程方式创建路径,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);

关于silverlight - 如何在 Silverlight 中克隆路径资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1173521/

相关文章:

c# - IDataErrorInfo 错误消息触发,但未显示任何消息

silverlight - 设置NumericUpDown的背景

mercurial - 如何使用 Mercurial 克隆特定标签版本?

java - 在 LinkedList 上实现克隆

Android:路径中的 ShapeDrawable 模糊

postgresql - 使用 pg_restore 进行多个转储时管理外键

asp.net - 如何在 Web 应用程序客户端录制音频并将其保存在 Web 服务器中?

silverlight 有时可以在 Mac 上运行,有时则不能

java - 从无法在 Windows 上运行的资源加载图像

java - 使用 java.nio.file.Paths 接口(interface)时缺少方案 (IllegalArgumentException)