C # Как загрузить холст с XML - PullRequest
0 голосов
/ 27 июня 2019

Моя проблема в том, что я не могу понять, как загрузить объект типа Canvas из файла XML.Я надеюсь, что вы можете помочь мне.

Это то, что я пытался, я покажу вам код того, как я делаю сериализацию, на всякий случай, если я сделал что-то не так.

private void SaveButton_Click(object sender, RoutedEventArgs e)
{

    SaveFileDialog sfd = new SaveFileDialog();

    sfd.FileName = "untitled";
    sfd.Filter = "XML Files(*.xml) | *.xml | Text Files(*.txt) | *.txt | All Files(*.*) | *.*  ";

    sfd.ShowDialog();

    MainWindow mainWindow = new MainWindow();

    SerializeToXML(mainWindow, designSpace, 96, sfd.FileName);

      mainWindow.Close();


}

public static void SerializeToXML(MainWindow window, Canvas canvas, int dpi, string filename)
{

    string mystrXAML = XamlWriter.Save(canvas);

    FileStream filestream = File.Create(filename);
    StreamWriter streamwriter = new StreamWriter(filestream);
    streamwriter.Write(mystrXAML);
    streamwriter.Close();
    filestream.Close();
}





private void LoadButton_Click(object sender, RoutedEventArgs e)
{
    var fileContent = string.Empty;
    OpenFileDialog ofd = new OpenFileDialog();
    ofd.InitialDirectory = "c:\\";
    ofd.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    ofd.FilterIndex = 2;
    ofd.RestoreDirectory = true;

     ofd.ShowDialog();


    var fileStream = ofd.OpenFile();
    string boi = ofd.FileName;

    // Create an instance of the XmlSerializer specifying type.
    XmlSerializer serializer =
    new XmlSerializer(typeof(Canvas));

    // Create a TextReader to read the file. 
    FileStream fs = new FileStream(boi, FileMode.Open);
    TextReader reader = new StreamReader(fs);

    // Use the Deserialize method to restore the object's state.
    designSpace = (Canvas)serializer.Deserialize(reader);



}

Приложение работает хорошо, пока я не попытаюсь загрузить файл XML, вот когда появляется это исключение:

System.InvalidOperationException: 'Error to reflect type System.Windows.Controls.Canvas'.'

NotSupportedException: Can not serialize the member
System.Windows.Input.InputBinding.Command type
System.Windows.Input.ICommand because it's an interface.
...