繁体   English   中英

在自定义类中存储InkCanvas(?)

[英]Storing InkCanvas in custom class (?)

我正在为我的学生编写一个简单的应用程序,但我陷入了工作的中间。 所以,这就是它的意义-这是一个用于管理非常简单的笔记本的简单应用。 每个笔记本包含一个文本框和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与该类的属性相关联,在每次关闭应用程序时将其保存,并在每次选择其他笔记本时进行加载。 如果我可以简单地序列化它,那就太酷了。 画布上没有花哨的东西,没有图像上传或位图。 有任何快速有效的方法可以做到这一点吗?

您只需从InkCanvas保存StrokeCollection StrokeCollection具有一个重载的Save方法 ,您可以使用该方法Stroke数据保存到Stream 从链接的“ Save方法”页面:

FileStream fs = null;

try
{
    fs = new FileStream(inkFileName, FileMode.Create);
    inkCanvas1.Strokes.Save(fs);
}
finally
{
    if (fs != null)
    {
        fs.Close();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM