public override void Save(OpenedFile file, Stream stream) { if (file != PrimaryFile) { return; } if (codeEditor.CanSaveWithCurrentEncoding()) { codeEditor.Save(stream); } else { int r = MessageService.ShowCustomDialog( "${res:Dialog.Options.IDEOptions.TextEditor.General.FontGroupBox.FileEncodingGroupBox}", StringParser.Parse("${res:AvalonEdit.FileEncoding.EncodingCausesDataLoss}", new StringTagPair("encoding", codeEditor.Encoding.EncodingName)), 0, -1, "${res:AvalonEdit.FileEncoding.EncodingCausesDataLoss.UseUTF8}", "${res:AvalonEdit.FileEncoding.EncodingCausesDataLoss.Continue}"); if (r == 1) { // continue saving with data loss MemoryStream ms = new MemoryStream(); codeEditor.Save(ms); ms.Position = 0; ms.WriteTo(stream); ms.Position = 0; // Read back the version we just saved to show the data loss to the user (he'll be able to press Undo). using (StreamReader reader = new StreamReader(ms, codeEditor.Encoding, false)) { codeEditor.Document.Text = reader.ReadToEnd(); } return; } else { // unfortunately we don't support cancel within IViewContent.Save, so we'll use the safe choice of UTF-8 instead codeEditor.Encoding = System.Text.Encoding.UTF8; codeEditor.Save(stream); } } }