using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace ScriptPad { /// /// MainWindow.xaml 的交互逻辑 /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); //if (string.IsNullOrWhiteSpace(Properties.Settings.Default.WorkFolder)) //{ // Properties.Settings.Default.WorkFolder = Environment.CurrentDirectory; //} //var dir = new System.IO.DirectoryInfo(Properties.Settings.Default.WorkFolder); //treeRoot.Header = dir.FullName; //treeRoot.IsExpanded = true; //foreach (var item in dir.EnumerateFiles()) //{ // if (item.Extension == ".csx") // { // this.treeRoot.Items.Add(new TreeViewItem() { Header = item.Name }); // } //} AddEditor(); } private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (tc.SelectedIndex == tc.Items.Count - 1) { AddEditor(); } } private void AddEditor(string path = null) { var editor = new CodeEditor(); var tb = new TextBlock(); tb.Text = editor.Script.Name; tb.ContextMenu = new ContextMenu(); var menuItem = new MenuItem(); menuItem.Header = "关闭"; tb.ContextMenu.Items.Add(menuItem); var tabitem = (TabItem)tc.Items[tc.Items.Count - 1]; tabitem.Header = tb;// editor.Script.Name; tabitem.Content = editor; menuItem.Click += (sender, e) => { CloseTab(tabitem); }; var tab = new TabItem() { Header = "+" }; tc.Items.Add(tab); } /// /// 关闭标签页 /// /// private void CloseTab(TabItem tab) { try { var codeEditor = tab.Content as CodeEditor; codeEditor.Close(); tc.Items.Remove(tab); if (tc.Items.Count == 1) { AddEditor(); } } catch (TaskCanceledException) { } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { var names = tc.Items.Cast() .Select(tab => tab.Content as CodeEditor) .Where(editor => editor != null) .Select(editor => editor.Script.Name) .ToList(); } private async void RunCommand_Executed(object sender, ExecutedRoutedEventArgs e) { var tabItem = this.tc.SelectedItem as TabItem; var codeEditor = tabItem.Content as CodeEditor; await codeEditor.Run(); } } }