Приступаем к реализации. В Visual Studio 2019 Community Edition создаем новое решение – WPF App (.NET Framework). Можно было бы и .NET Core (чтоб и под Linux), но для проверки идеи выбираем самый простой подход. Как говорится, сделай сначала просто.

Переходим к разработке прототипа.  В файле MainWindow.xaml меняем

x:Class="WpfApp1.MainWindow"

на x:Class="WpfApp1.Dynamo"

В файле MainWindow.xaml.cs меняем

public partial class MainWindow : Window на

public partial class Dynamo : Window .

Сохраняем и запускаем проект. Там пока одно пустое окошко.

В графическом дизайнере среды создаем наш интерфейс, запускаем (рис. 2.1).

Рис. 2.1. Интерфейс MathPanel

Сам графический интерфейс задан в файле MainWindow.xaml и имеет следующий вид.

<Window x:Class="MathPanel.Dynamo"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:MathPanel"

        mc:Ignorable="d"

        Title="Math Panel" Height="620" Width="1200" Left="5" Top="5">

    <Grid Margin="0,0,0,0" Height="600" Width="1200" Background="Beige">

        <Label x:Name="Label1" Content="Команды" HorizontalAlignment="Left" Margin="4,4,0,0" VerticalAlignment="Top"/>

        <Label x:Name="Label2" Content="Сообщения" HorizontalAlignment="Left" Margin="4,342,0,0" VerticalAlignment="Top" BorderThickness="1" BorderBrush="Gainsboro"/>

        <Button x:Name="button1" Content="Выполнить" HorizontalAlignment="Left" Height="28" Margin="197,4,0,0" VerticalAlignment="Top" Width="68"/>

        <Button x:Name="button2" Content="График" HorizontalAlignment="Left" Height="28" Margin="297,4,0,0" VerticalAlignment="Top" Width="68"/>

        <Button x:Name="button3" Content="Открыть" HorizontalAlignment="Left" Height="28" Margin="397,4,0,0" VerticalAlignment="Top" Width="68"/>

        <Button x:Name="button4" Content="Сохранить" HorizontalAlignment="Left" Height="28" Margin="497,4,0,0" VerticalAlignment="Top" Width="68"/>

        <Button x:Name="button5" Content="Компилировать" HorizontalAlignment="Left" Height="28" Margin="597,4,0,0" VerticalAlignment="Top" Width="95"/>

        <Button x:Name="button6" Content="Новый скрипт" HorizontalAlignment="Left" Height="28" Margin="717,4,0,0" VerticalAlignment="Top" Width="90"/>

        <Button x:Name="button7" Content="Картинка" HorizontalAlignment="Left" Height="28" Margin="827,4,0,0" VerticalAlignment="Top" Width="90"/>

        <ScrollViewer Name="sv1" VerticalScrollBarVisibility="Auto" BorderThickness="1" Width="1180" Margin="4,40,4,260" Height="320" Background="AliceBlue">

            <TextBox x:Name="textBlock1" HorizontalAlignment="Left" VerticalScrollBarVisibility="Visible" TextWrapping="Wrap" AcceptsReturn="True" Text="" VerticalAlignment="Top" Height="280" Width="1150"/>

        </ScrollViewer>

        <TextBox x:Name="textBlock2" HorizontalAlignment="Left" VerticalScrollBarVisibility="Visible" TextWrapping="Wrap" AcceptsReturn="True" Text="" VerticalAlignment="Top" Height="200" Width="1150" Margin="8,370,42,0"/>

        <WebBrowser x:Name="web1" HorizontalAlignment="Left" Height="550" VerticalAlignment="Bottom" Width="1180" Margin="0,0,0,9"/>

        <Image x:Name="img1" HorizontalAlignment="Left" Height="550" VerticalAlignment="Bottom" Width="1180" Margin="0,0,0,9" />

    </Grid>

</Window>

Элемент Window – корневой. В нем – Grid. В Grid заданы метки, кнопки, два текстовых блока, компоненты Webbrowser и Image.  Код программы выглядит так.

namespace MathPanel

{

    /// <summary>

    /// Логика взаимодействия для MainWindow.xaml

    /// </summary>

    public partial class Dynamo : Window

    {

        public Dynamo()

        {

            InitializeComponent();

        }

    }

}

Приступаем к наращиванию мышц. Скроем 2 наших компонента в конструкторе класса.

 

        public Dynamo()

        {

            InitializeComponent();

 

            //скрыть веб-браузер и компонент картинки

            web1.Visibility = Visibility.Hidden;

            img1.Visibility = Visibility.Hidden;

 

        }

После запуска видим, что появились два текстовых блока. Создадим обработчик для кнопки «Выполнить».

        //обработчик кнопки "Выполнить"

        private void Button1_Click(object sender, RoutedEventArgs e)

        {

            MessageBox.Show("Не готово!");

            return;

        }

 

И статическую переменную для версии программы     

        readonly static string version = " v1.0";

 

В конструктор добавим команды для модификации заголовка программы и назначение обработчика

            this.Title += version;

            button1.Click += Button1_Click;

 

Запускаем программу, нажимаем на кнопку. Результат на рис.2.2.

Рис.2.2. Первый результат