Hello World - как это работает?
Важно!
Этот проект является экспериментальным выпуском. Мы надеемся, что вы опробуете экспериментальные мобильные привязки Blazor и оставить отзыв по адресу https://github.com/xamarin/MobileBlazorBindings.
Примечание
Эта страница является продолжением пошагового руководства По созданию первого приложения . Прежде чем продолжить, рекомендуется выполнить это пошаговое руководство.
Давайте рассмотрим первоначальный проект, созданный в предыдущем пошаговом руководстве, чтобы понять, как использовать экспериментальные мобильные привязки Blazor.
Main проектом для просмотра является общий проект, содержащий .razor
файлы. Проекты Android и iOS не содержат код, характерный для экспериментальных привязок Blazor для мобильных устройств.
Ниже приведены файлы в общем проекте:
_Imports.razor
— содержит общие директивы, применяемые ко всем остальным.razor
файлам в этой папке и ее вложенных папках. Вложенные папки могут содержать собственные_Imports.razor
файлы с дополнительными директивами. Наиболее распространенным типом директивы в этом файле является директива@using
, которая используется для импорта пространства имен в.razor
файлы, точно так же, как оператор C#using
.App.cs
— содержит точку входа main пользовательского интерфейса приложения, представленную классом, производным отXamarin.Forms.Application
базового класса. Конструктор этого класса создает экземпляр универсального узла, добавляет службы к узлу (в проекте по умолчанию нет), а затем использует узел для добавления компонента Blazor с именемHelloWorld
в элемент приложения (this
).Counter.razor
— содержит компонент Blazor с именемCounter
.HelloWorld.razor
— содержит компонент Blazor с именемHelloWorld
.
Давайте рассмотрим два компонента Blazor, чтобы узнать, как они работают.
Компонент Counter Blazor
Этот компонент содержит два раздела:
Разметка, определяющая элементы пользовательского интерфейса и связанные с ними свойства и обработчики событий:
<Frame CornerRadius="10" BackgroundColor="Color.LightBlue"> <StackLayout Orientation="StackOrientation.Horizontal" HorizontalOptions="LayoutOptions.Center"> <Button Text="Increment" OnClick="IncrementCount" /> <Label Text="@("The button was clicked " + count + " times")" FontAttributes="FontAttributes.Bold" VerticalTextAlignment="TextAlignment.Center" /> </StackLayout> </Frame>
Html-подобные теги представляют компоненты пользовательского интерфейса, соответствующие компонентам Xamarin.Forms, а также их свойствам и событиям. Некоторые свойства имеют вычисляемые значения, например
Label
свойство компонентаText
, для которого задано значение, вычисленное кодом C#, которое обозначается блоком выражений@( ... )
.При запуске обработчика событий, например
Button
события компонентаOnClick
, компонент автоматически повторно отрисовывается, что позволяет пользовательскому интерфейсу обновляться без дополнительной логики. Более сложные сценарии могут управлять тем, какие компоненты будут повторно отображаться и когда.Код, реализующий обработчики событий или другие функциональные возможности компонента, заключенный
@code { ... }
в блок:int count; void IncrementCount() { count++; }
Этот код увеличивает
count
значение поля, которое также используется в качестве вычисляемогоLabel
значения свойства компонентаText
. После запуска обработчикаIncrementCount()
событий при повторной отрисовкиcount
пользовательского интерфейса будет использоваться новое значение .
Компонент HelloWorld Blazor
Компонент HelloWorld содержит только разметку:
<ContentView>
<StackLayout Margin="new Thickness(20)">
<Label Text="Hello, World!"
FontSize="40" />
<Counter />
</StackLayout>
</ContentView>
Обратите внимание, что на Counter
компонент ссылается этот компонент, ссылаясь на него как на тег <Counter />
.
Каждый компонент Blazor компилируется в класс с тем же именем, что и файл. Пространство имен — это корневое пространство имен проекта, а также имена папок , если таковые есть, разделенные точками (.
). На тип может ссылаться другой код C# через имя типа (не общее) или в .razor
файле, используя его в качестве тега.