179 строки
5.0 KiB
C#
179 строки
5.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Markup;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Xml;
|
|
|
|
using Microsoft.Win32;
|
|
|
|
namespace ICSharpCode.XamlDesigner
|
|
{
|
|
public partial class MainWindow
|
|
{
|
|
public static SimpleCommand CloseAllCommand = new SimpleCommand("Close All");
|
|
public static SimpleCommand SaveAllCommand = new SimpleCommand("Save All", ModifierKeys.Control | ModifierKeys.Shift, Key.S);
|
|
public static SimpleCommand ExitCommand = new SimpleCommand("Exit");
|
|
public static SimpleCommand RefreshCommand = new SimpleCommand("Refresh", Key.F5);
|
|
public static SimpleCommand RunCommand = new SimpleCommand("Run", ModifierKeys.Shift, Key.F5);
|
|
public static SimpleCommand RenderToBitmapCommand = new SimpleCommand("Render to Bitmap");
|
|
|
|
static void RenameCommands()
|
|
{
|
|
ApplicationCommands.Open.Text = "Open...";
|
|
ApplicationCommands.SaveAs.Text = "Save As...";
|
|
}
|
|
|
|
void NewCommand_Executed(object sender, ExecutedRoutedEventArgs e)
|
|
{
|
|
Shell.Instance.New();
|
|
}
|
|
|
|
void OpenCommand_Executed(object sender, ExecutedRoutedEventArgs e)
|
|
{
|
|
Shell.Instance.Open();
|
|
//AvalonDockWorkaround();
|
|
}
|
|
|
|
void CloseCommand_Executed(object sender, ExecutedRoutedEventArgs e)
|
|
{
|
|
Shell.Instance.CloseCurrentDocument();
|
|
}
|
|
|
|
void CloseCommand_PreviewExecuted(object sender, ExecutedRoutedEventArgs e)
|
|
{
|
|
Shell.Instance.CloseCurrentDocument();
|
|
}
|
|
|
|
void CloseAllCommand_Executed(object sender, ExecutedRoutedEventArgs e)
|
|
{
|
|
Shell.Instance.CloseAll();
|
|
}
|
|
|
|
void SaveCommand_Executed(object sender, ExecutedRoutedEventArgs e)
|
|
{
|
|
Shell.Instance.SaveCurrentDocument();
|
|
}
|
|
|
|
void SaveAsCommand_Executed(object sender, ExecutedRoutedEventArgs e)
|
|
{
|
|
Shell.Instance.SaveCurrentDocumentAs();
|
|
}
|
|
|
|
void SaveAllCommand_Executed(object sender, ExecutedRoutedEventArgs e)
|
|
{
|
|
Shell.Instance.SaveAll();
|
|
}
|
|
|
|
void RunCommand_Executed(object sender, ExecutedRoutedEventArgs e)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
var xmlWriter = XmlWriter.Create(new StringWriter(sb));
|
|
Shell.Instance.CurrentDocument.DesignSurface.SaveDesigner(xmlWriter);
|
|
|
|
var txt = sb.ToString();
|
|
var xmlReader = XmlReader.Create(new StringReader(txt));
|
|
|
|
var ctl = XamlReader.Load(xmlReader);
|
|
|
|
Window wnd = ctl as Window;
|
|
if (wnd == null) {
|
|
wnd = new Window();
|
|
wnd.Content = ctl;
|
|
}
|
|
wnd.Show();
|
|
}
|
|
|
|
void RenderToBitmapCommand_Executed(object sender, ExecutedRoutedEventArgs e)
|
|
{
|
|
int desiredWidth = 300;
|
|
int desiredHeight = 300;
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
var xmlWriter = XmlWriter.Create(new StringWriter(sb));
|
|
Shell.Instance.CurrentDocument.DesignSurface.SaveDesigner(xmlWriter);
|
|
|
|
var txt = sb.ToString();
|
|
var xmlReader = XmlReader.Create(new StringReader(txt));
|
|
|
|
var ctl = XamlReader.Load(xmlReader) as Control;
|
|
if (ctl is Window) {
|
|
var wnd = ctl as Window;
|
|
wnd.Width = desiredWidth;
|
|
wnd.Height = desiredHeight;
|
|
wnd.Top = -10000;
|
|
wnd.Left = -10000;
|
|
wnd.Show();
|
|
} else {
|
|
ctl.Measure(new Size(desiredWidth, desiredHeight));
|
|
ctl.Arrange(new Rect(new Size(desiredWidth, desiredHeight)));
|
|
}
|
|
|
|
RenderTargetBitmap bmp = new RenderTargetBitmap(300, 300, 96, 96, PixelFormats.Default);
|
|
bmp.Render(ctl);
|
|
|
|
var encoder = new PngBitmapEncoder();
|
|
|
|
encoder.Frames.Add(BitmapFrame.Create(bmp));
|
|
|
|
var dlg = new SaveFileDialog();
|
|
dlg.Filter = "*.png|*.png";
|
|
if (dlg.ShowDialog() == true) {
|
|
using (Stream stm = File.OpenWrite(dlg.FileName)) {
|
|
encoder.Save(stm);
|
|
stm.Flush();
|
|
}
|
|
}
|
|
|
|
if (ctl is Window) {
|
|
var wnd = ctl as Window;
|
|
wnd.Close();
|
|
}
|
|
}
|
|
|
|
void ExitCommand_Executed(object sender, ExecutedRoutedEventArgs e)
|
|
{
|
|
Shell.Instance.Exit();
|
|
}
|
|
|
|
void CurrentDocument_CanExecute(object sender, CanExecuteRoutedEventArgs e)
|
|
{
|
|
e.CanExecute = Shell.Instance.CurrentDocument != null;
|
|
}
|
|
|
|
void RouteDesignSurfaceCommands()
|
|
{
|
|
RouteDesignSurfaceCommand(ApplicationCommands.Undo);
|
|
RouteDesignSurfaceCommand(ApplicationCommands.Redo);
|
|
RouteDesignSurfaceCommand(ApplicationCommands.Copy);
|
|
RouteDesignSurfaceCommand(ApplicationCommands.Cut);
|
|
RouteDesignSurfaceCommand(ApplicationCommands.Paste);
|
|
RouteDesignSurfaceCommand(ApplicationCommands.SelectAll);
|
|
RouteDesignSurfaceCommand(ApplicationCommands.Delete);
|
|
}
|
|
|
|
void RouteDesignSurfaceCommand(RoutedCommand command)
|
|
{
|
|
var cb = new CommandBinding(command);
|
|
cb.CanExecute += delegate(object sender, CanExecuteRoutedEventArgs e) {
|
|
if (Shell.Instance.CurrentDocument != null) {
|
|
Shell.Instance.CurrentDocument.DesignSurface.RaiseEvent(e);
|
|
}else {
|
|
e.CanExecute = false;
|
|
}
|
|
};
|
|
cb.Executed += delegate(object sender, ExecutedRoutedEventArgs e) {
|
|
Shell.Instance.CurrentDocument.DesignSurface.RaiseEvent(e);
|
|
};
|
|
CommandBindings.Add(cb);
|
|
}
|
|
}
|
|
}
|