Первое приложение с .NET CLI

Последнее обновление: 26.11.2023

Для создания приложения на WPF и C# необходимы две вещи: текстовый редактор для написания кода программы и компилятор для компиляции кода в приложение.

В качестве текстового редактора можно взять любой понравившийся, например, Visual Studio Code

А для компиляции и запуска программы нам потребуется .NET SDK. Для его установки перейдем на официальный сайт по ссылке .NET SDK

Загрузка .NET SDK для WPF

После установки .NET SDK для первого проекта определим какую-нибудь папку. Например, в моем случае это будет папка C:\dotnet\wpf\helloapp. Откроем терминал/командную строку и перейдем к созданной папке проекта с помощью команды cd

cd C:\dotnet\wpf\helloapp

В данном случае мы для создания и запуска проекта мы будем использовать встроенную инфраструктуру .NET CLI, которая устанавливается вместе с .NET SDK.

Для создания проекта в .NET CLI применяется команда dotnet new, после которой указывается тип проекта. Для создания проекта WPF применяется шаблон - wpf. Поэтому введем в терминале команду dotnet new wpf:

C:\Users\eugen>cd C:\dotnet\wpf\helloapp

C:\dotnet\wpf\helloapp>dotnet new wpf
Шаблон "Приложение WPF" успешно создан.

Идет обработка действий после создания...
Восстановление C:\dotnet\wpf\helloapp\helloapp.csproj:
  Определение проектов для восстановления...
  Восстановлен C:\dotnet\wpf\helloapp\helloapp.csproj (за 1,12 sec).
Восстановление выполнено.



C:\dotnet\wpf\helloapp>

После выполнения этой команды у нас будет создан следующий проект:

Первый проект WPF на C# в Visual Studio Code

Структура проекта WPF

Рассмотрим базовую структуру простейшего стандартного проекта WPF:

  • helloapp.csproj: стандартный файл проекта C#, который соответствует назанию проекта (по умолчанию названию каталога) и описывает все его настройки.

  • App.xaml задает ресурсы приложения и ряд конфигурационных настроек в виде кода XAML. В частности, в файле App.xaml задается файл окна программы, которое будет открываться при запуске приложения. Если вы откроете этот файл, то можете найти в нем строку StartupUri="MainWindow.xaml" - то есть в данном случае, когда мы запустим приложение, будет создаваться интерфейс из файла MainWindow.xaml.

    App.xaml.cs - это файл кода на C#, связанный с файл App.xaml, который также позволяет задать ряд общих ресурсов и общую логику для приложения, но в вид кода C#.

  • AssemblyInfo.cs содержит информацию о создаваемой в процессе компиляции сборке

  • MainWindow.xaml представляет визуальный интерфейс окна приложения в виде кода XAML.

    MainWindow.xaml.cs - это файл логики кода на C#, связанный с окном MainWindow.xaml.

Например, посмотрим на содержимое файла helloapp.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWPF>true</UseWPF>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

</Project>

Для компиляции приложения WPF указаны следующие настройки:

  • OutputType: определяет выходной тип проекта. Должен иметь значение WinExe - то есть выполняемое приложение с расширением exe под Windows

  • TargetFramework: определяет применяемую для компиляции версию фреймворка .NET. Поскольку при создании проекта в моем случае была выбрана версия .NET 8, а сам проект зависит от компонентов Windows, то здесь должно быть значение net8.0-windows

  • Nullable: подключает в проект функционалность ссылочных nullable-типов

  • UseWPF: указывает, будет ли проект использовать WPF (для этого устанавливается значение true)

  • ImplicitUsings: подключает в проект функциональность неявно подключаемых глобальных пространств имен

Запуск проекта

Проект по умолчанию уже имеет некоторую примитивную базовую логику. Итак, запустим проект. Для этого выполним команду

dotnet run

При запуске запускается графическое окно, код которого определяют файлы MainWindow.xaml/MainWindow.xaml.cs:

Первое приложение на WPF на С# с .NET CLI

После запуска приложения студия компилирует его в файл с расширением exe. Найти данный файл можно, зайдя в папку проекта и далее в каталог \bin\Debug\net8.0-windows

Создание первого приложения

Однако приложение с пустым окном - не слишком показательный пример. Добавим в него чуть больше функционала. Для этого откроем файл логики кода окна приложения - MainWindow.xaml.cs. Сейчас он имеет следующий код:

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 helloapp
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

Здесь определен класс MainWindow, который наследуется от класса Window и берет от него всю базовую функциональность окон. А в конструкторе этого класса вызывается метод InitializeComponent(), который позволяет применить интерфейс из файла MainWindow.xaml.

Теперь изменим файл MainWindow.xaml.cs следующим образом:

using System.Windows;

namespace helloapp
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("WPF на METANIT.COM");
        }  
    }
}

Здесь добавлен метод Button_Click, который будет выступать в качестве обработчика нажатия кнопки. Ообработчики нажатия кнопки должны принимать два параметра типов object и RoutedEventArgs. В самом обработчике вызывается метод MessageBox.Show, который отображает окно с сообщением. Отображаемое сообщение передается в качестве параметра.

Теперь определим саму кнопку. Для этого перейдем к файлу MainWindow.xaml, который содержит разметку визуального интерфейса в виде кода XAML. По умолчанию он имеет следующее содержимое:

<Window x:Class="helloapp.MainWindow"
        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:HelloApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>

    </Grid>
</Window>

XAML в целом напоминает язык разметки HTML: здесь у нас сначала определен элемент верхнего уровня Window - окно приложения, в нем определен элемент Grid - контейнер верхнего уровня, в который мы можем добавлять другие элементы. Каждый элемент может иметь определенные атрибуты. Более подробно с языком XAML и элементами мы познакомимся позднее, а пока изменим эту разметку на следующую:

<Window x:Class="helloapp.MainWindow"
        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:helloapp"
        mc:Ignorable="d"
        Title="MainWindow" Height="250" Width="300">
    <Grid>
    <Button Content="Нажать" FontSize="13" Width="80" Height="30" 
                Click="Button_Click" />
    </Grid>
</Window>

Для определения кнопки внутри элемента Grid определен элемент Button. Для этого элемента с помощью атрибутов можно установать различные его характеристики. Так, в данном случае устанавливаются следующие атрибуты:

  • Content: содержимое кнопки

  • FontSize: высота шрифта

  • Width: ширина кнопки

  • Height: высота кнопки

  • Click: обработчик нажатия кнопки. Здесь подключается созданный выше в файле кода C# метод Button_Click. В итоге по нажатию на эту кнопку сработает метод Button_Click

Запустим приложение и нажмем на кнопку, и нам должно отобразиться сообщение:

Графическое приложение на C# и WPF с .NET CLI
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850