2011-07-21 28 views
0

GeometryDrawingsから形成された動的に生成されたスタイルに何らかの種類のインターフェイス(保存/編集/読み込み)を用意する必要があります。問題は、Nameプロパティが不足している状況で、それらの間の区別です。私はこのようなものを試してみた:name変数で、ここでの名前(またはこのようなもの)、例えば、同じようにそれを変更し、より取得するためにシリアライズすることができるようにする:GeometryDrawingシリアル化/逆シリアル化

// some dummy predefined style, it has more drawings but i keep first one 
const string templateXaml = @"<DrawingBrush xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" Stretch=""Uniform""> 
       <DrawingBrush.Drawing> 
        <DrawingGroup> 
         <DrawingGroup.Children> 
          <GeometryDrawing Geometry=""F1 M 77,92L 704,92L 704,517L 77,517L 77,92 Z "" x:Name=""test_name""> 
           <GeometryDrawing.Pen> 
            <Pen Thickness=""4"" LineJoin=""Round"" Brush=""#FFFF7D00""/> 
           </GeometryDrawing.Pen> 
          </GeometryDrawing> 
    <!--More drawings here --> 
          </DrawingGroup.Children> 
        </DrawingGroup> 
       </DrawingBrush.Drawing> 
      </DrawingBrush>"; 
     var drawingBrush = XamlReader.Parse(templateXaml) as DrawingBrush; 
     var firstDrawing = (drawingBrush.Drawing as DrawingGroup).Children[0] as GeometryDrawing; 
     //.. 
     var name = firstDrawing.GetValue(NameProperty); 
     //.. 
     firstDrawing.SetValue(FrameworkElement.NameProperty, "some value"); 

私はXを持っているしたいと思いますスタイルが異なるが図面の名前が異なる(現在はElement1,2,3 ...という名前が付けられていて、サブジェクトエリアに応じて名前を付ける必要があり、その処理は自動的でなくてはならず、 WYSIWYG'lyそれを行う - 各描画はビジュアルに入れ、ビジュアルはカスタムFrameworkElementなどに入れます)。もちろん、Drawingsで作業する全プロセスは苦痛ですが、それは無視できないシステム設計要件です。前もって感謝します。

+0

あなたが何を求めているのかよく分かりません。 x:Nameを簡単に設定または変更できるようにテンプレートXMLを定義する方法を尋ねていますか? –

+0

並べ替え私は、複雑な描画要素のテンプレートを定義し、その要素を識別してその状態を維持する能力をもって(好ましくは標準的な直列化アルゴリズムを介して)読み書きできるようにしたい。 – Jaded

答えて

0

BLクラスの図面をラップしてシリアライズ/デシリアライズするよりも優れた方法が見つかりませんでした。一貫性が失われ、要件に違反しました - 私はグラフィックオブジェクトを表す2つのエンティティ(プレーンジオメトリとそれらを記述するクラス)を持っていますが、必要に応じて変換/交換できます。

関連する問題