在WPF中,我有被丟棄到一個InkCanvas並添加作爲一個孩子的圖像:如何使用大小,位置和旋轉來保存圖像,然後進行恢復?
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