【问题标题】:Storing InkCanvas in custom class (?)在自定义类中存储 InkCanvas (?)
【发布时间】:2014-05-27 12:56:50
【问题描述】:

我正在为我的学生编写一个简单的应用程序,但我正忙于工作。所以,这就是它的内容——它是一个简单的应用程序,用于管理也非常简单的笔记本。每个笔记本都包含一个文本框和 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 没有什么花哨的东西,没有图像上传或位图。有什么快速有效的方法吗?

【问题讨论】:

    标签: c# wpf inkcanvas


    【解决方案1】:

    您可以简单地从您的InkCanvas 中保存StrokeCollectionStrokeCollection 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();
        }
    }
    

    【讨论】:

    • 所以我的班级应该只存储一个文件名,然后每次打开笔记本时加载它?嗯,我试试看
    猜你喜欢
    • 1970-01-01
    • 2021-08-09
    • 2013-02-17
    • 2017-10-24
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多