2017-04-22 8 views
2

、私はInkCanvas上に滴下し、子として追加された画像を有する:その後adornerの方法によって、画像が移動し、サイズ変更されイメージをサイズ、位置、および回転で永続化してから復元する方法はありますか? WPFで

ImageInfo image_Info = e.Data.GetData(typeof(ImageInfo)) as ImageInfo; 
     if (image_Info != null) 
     { 
      Image image = new Image(); 
      image.Width = image_Info.Width * 4; 
      image.Stretch = Stretch.Uniform; 
      image.Source = new BitmapImage(image_Info.Uri); 
      Point position = e.GetPosition(ic); 

      InkCanvas.SetLeft(image, position.X); 
      InkCanvas.SetTop(image, position.Y); 
      ic.Children.Add(image); 
    } 

。次に、データベースに保存されます。

public List<string> Children; 

var uiList = ic.Children.Cast<UIElement>().ToList(); 
      foreach (var p in uiList) 
      { 
       string uis = System.Windows.Markup.XamlWriter.Save(p); 
       s.Add(uis); 
      } 
      Children = s; 

子供たちはデータベースに送られます。データベース中の得られたレコードのように示す: - のみ初期落ち点

"<Image Source="pack://application:,,,/Images/Female - Front.png" Stretch="Uniform" Width="Auto" InkCanvas.Top="296" InkCanvas.Left="695" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" /> " 

新しい位置、大きさ、又は画像の回転への参照はありません。 xmlreaderを使用してイメージを再作成すると、イメージが最初のドロップポイントとサイズに復元されます。

foreach (string s in behavior.Children) 
      { 
       var stringReader = new StringReader(s); 
       var xmlReader = System.Xml.XmlReader.Create(stringReader, new System.Xml.XmlReaderSettings()); 

       Image b = (Image)System.Windows.Markup.XamlReader.Load(xmlReader); 
       ic.Children.Add(b); 
      } 

(イメージソースはアプリケーションリソースとしてパックされています)。

イメージのサイズ、位置、回転を維持して復元するにはどうすればよいですか?

TIA。

+0

XAMLをシリアル化およびデシリアライズしないでください。現在のビューを説明するすべての必要なデータを含む適切なモデルクラスを作成することをお勧めします。次に、そのモデルクラスのインスタンスをロードして保存します。 – Clemens

答えて

1
  1. サイズ/ロケーション/ローテーションのDBテーブルにフィールドを追加してそこに情報を保存することもできます。

  2. または、これらのフィールドをカンマ(、)で区切って追加して、ImageコントロールのTagフィールドに保存することができます。 <Image Tag="(120,230);(50,50);(-30)" ... />

また、DB内byte[]として全体の操作された画像を保存することができます。

これが手元の問題を解決するかどうかを教えてください。

+0

このコードは、アドオンを削除すると正しく動作します。しかし、私は本当にあなたの考えは、タグに追加情報を文字列として格納するのが好きです。私はxamlwriterが、フロントエンドとデータベースの間のイメージの識別を可能にする永続性のための文字列データを正しく書くと信じています。良いアイデア。ありがとう。 –

関連する問題