2009-07-23 10 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は含まれていません...なぜリソースセクションからパネルに直接コピーすると、パスがレンダリングされるので、わかりません。

何がありますか?

おかげで、 セルジオ

答えて

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対Silverlightホワイトペーパーで書く別のセクションを参照してください。 :-) – SergioL

関連する問題