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