MonacoEditor.xaml.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using System.IO;
  3. using System.Windows;
  4. using InABox.Core;
  5. using Microsoft.Web.WebView2.Core;
  6. namespace InABox.Wpf.DynamicGrid.Controls;
  7. public partial class MonacoEditor : Window
  8. {
  9. private static string MonacoFolder = Path.Combine(
  10. AppDomain.CurrentDomain.BaseDirectory,
  11. @"MonacoEditor");
  12. const string defaultText = @"function helloWorld() {\n\tconsole.log(""Hello world!"");\n}";
  13. public string Text { get; private set; } = defaultText;
  14. public MonacoEditor(string script)
  15. {
  16. Text = script;
  17. InitializeComponent();
  18. webView21.NavigationCompleted += WebView21_NavigationCompleted;
  19. webView21.WebMessageReceived += WebView21_WebMessageReceived;
  20. webView21.Source = new Uri(Path.Combine(MonacoFolder, "index.html"));
  21. }
  22. private void WebView21_NavigationCompleted(object? sender, CoreWebView2NavigationCompletedEventArgs e)
  23. {
  24. webView21.ExecuteScriptAsync(@$"buildEditor(`{Text}`);");
  25. }
  26. private void WebView21_WebMessageReceived(object? sender, CoreWebView2WebMessageReceivedEventArgs e)
  27. {
  28. Text = e.TryGetWebMessageAsString();
  29. }
  30. private void Button_Click(object sender, RoutedEventArgs e)
  31. {
  32. webView21.ExecuteScriptAsync(@$"doAction(`cursorUndo`);");
  33. }
  34. private void WebView21_OnSizeChanged(object sender, SizeChangedEventArgs e)
  35. {
  36. //webView21.InvalidateVisual();
  37. //webView21.Source = new Uri(Path.Combine(MonacoFolder, "index.html"));
  38. }
  39. private void MonacoEditor_OnSizeChanged(object sender, SizeChangedEventArgs e)
  40. {
  41. //webView21.ExecuteScriptAsync(@$"buildEditor(`{Text}`);");
  42. }
  43. }