2011-07-21 93 views
0

需要爲從GeometryDrawings形成的動態生成樣式提供某種接口(保存/編輯/加載)。問題在於它們缺乏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 ...,並且必須根據主題區域命名,並且處理必須是自動的,但不是手動的,關於沒有能力的事實以所見即所得的方式做到這一點 - 每個繪圖都放入可視化,Visuals被放入自定義FrameworkElement等)。當然,使用Drawings的整個過程是一個痛苦,但這是我不能忽視的系統設計要求。提前致謝。

+0

我不太明白你在問什麼。你在問如何定義模板XML,以便x:Name很容易設置或更改? –

+0

類別。我想定義複雜繪圖元素的模板,並能夠讀取/保存(最好通過標準的序列化算法),並能夠識別其元素並保持其狀態。 – Jaded

回答

0

沒有找到比BL類中的圖紙更好的方式並且序列化/反序列化它們。丟失一致性和違反要求 - 現在我有兩個實體(簡單的幾何圖形和描述它們的類)來表示圖形對象,但是它們可以在需要時進行轉換/交換。