我正在为我的学生写一个简单的应用程序,而且我正处于工作的中间。所以,这就是它的意义 - 它是一个简单的应用程序,用于管理非常简单的笔记本电脑。每个笔记本都包含一个文本框和InkCanvas,用户可以在其中绘制简单的形状。单击所需的笔记本将其绑定到应用程序中的域,以便它们在飞行中更新。保存是通过xml序列化完成的。
Notebook是一个自定义类,并创建一个新类,创建此类的新实例。这是代码:
namespace Notes.Classes
{
[Serializable]
public class Notebook : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
[XmlAttribute("Notebook")]
private string Name;
[XmlElement("Notebook content")]
private string Content;
private DateTime Date;
#region OnPropertyChanged
protected void OnPropertyChanged(string info)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(info));
}
}
#endregion
#region Constructors
public Notebook(string Name, string Content)
{
this.Name = Name;
this.Date = DateTime.Now;
if (Content == "")
this.Content = "Write something";
else
this.Content = Content;
}
//This is never used private parameterless constructor created only because Serialization required one
//It is private, so it can't create new notebooks when not needed
private Notebook()
{
this.Name = "bez nazwy";
this.Content = "bez zawartości";
}
#endregion
[XmlElement("Notebook date")]
public string GetDate
{
get { return Date.ToString(); }
set { Date = DateTime.Parse(value); OnPropertyChanged("Date"); }
}
public string GetName
{
get { return Name; }
set { Name = value; OnPropertyChanged("Name"); }
}
public string GetContent
{
get { return Content; }
set { Content = value; OnPropertyChanged("Content"); }
}
public string GetPath
{
get { return InkPath;}
set { InkPath = value; OnPropertyChanged("InkPath"); }
}
}
}
现在我需要做的是以某种方式将InkCanvas Strokes推送到类的属性,每次关闭应用程序时保存它,并在每次选择不同的笔记本时加载。如果我可以简单地序列化它会太酷了。 onkcanvas没什么好看的,没有图片上传或位图。有任何快速有效的方法吗?
答案 0 :(得分:0)
您只需保存StrokeCollection
中的InkCanvas
即可。 StrokeCollection
Class有一个超载Save
method,可用于将Stroke
数据保存到Stream
。来自链接的Save
方法页面:
FileStream fs = null;
try
{
fs = new FileStream(inkFileName, FileMode.Create);
inkCanvas1.Strokes.Save(fs);
}
finally
{
if (fs != null)
{
fs.Close();
}
}