Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 477 478 479 480 481 482 483 484 485 ... 642

На заметку! Если нужно определить в разметке класс, который является частью текущей сборки, но находится в другом пространстве имен .NET Core, то префикс дескриптора xmlns определяется без атрибута assembly=:xmlns:myCtrls="clr-namespace:SomeNamespacelnMyApp"

Управление видимостью классов и переменных-членов

Многие ключевые слова вы увидите в действии в последующих главах там, где они потребуются; тем не менее, в качестве простого примера взгляните на следующее XAML-определение <Window>, в котором применяются ключевые слова ClassModifier и FieldModifier, а также x:Name и х:Class (вспомните, что редактор Kaxaml не позволяет использовать ключевые слова XAML, вовлекающие компиляцию, такие как x:Code, х:FieldModifier или х:ClassModifier):

<b>&lt;!-- Этот класс теперь будет объявлен как internal в файле *.g.cs —&gt; </b>

&lt;Window x:Class=&quot;MyWPFApp.MainWindow&quot; x:ClassModifier =&quot;internal&quot;

  xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;

  xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;&gt;

<b>  &lt;!-- Эта кнопка будет объявлена как public в файле *.g.cs --&gt;</b>

  &lt;Button x:Name =&quot;myButton&quot; x:FieldModifier =&quot;public&quot; Content = &quot;OK&quot;/&gt;

&lt;/Window&gt;

По умолчанию все определения типов C#/XAML являются открытыми (public), а члены — внутренними (internal). Однако для показанного выше определения XAML результирующий автоматически сгенерированный файл содержит внутренний тип класса с открытой переменной-членом Button:

<b>internal</b> partial class MainWindow : System.Windows.Window,

  System.Windows.Markup.IComponentConnector

{

  <b>public</b> System.Windows.Controls.Button myButton;

  ...

}

Элементы XAML, атрибуты XAML и преобразователи типов

После установки корневого элемента и необходимых пространств имен XML следующая задача заключается в наполнении корня дочерним элементом. В реальном приложении WPF дочерним элементом будет диспетчер компоновки (такой как Grid или StackPanel), который в свою очередь содержит любое количество дополнительных элементов, описывающих пользовательский интерфейс. Такие диспетчеры компоновки рассматриваются в главе 25, а пока предположим, что элемент &lt;Window&gt; будет содержать единственный элемент Button.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

Как было показано ранее в главе, элементы XAML отображаются на типы классов или структур внутри заданного пространства имен .NET Core, тогда как атрибуты в открывающем дескрипторе элемента отображаются на свойства или события конкретного типа. В целях иллюстрации введите в редакторе Kaxaml следующее определение &lt;Button&gt;:

&lt;Page

  xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;

  xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;&gt;

  &lt;Grid&gt;

   &lt;!-- Сконфигурировать внешний вид элемента Button --&gt;

    &lt;Button Height=&quot;50&quot; Width=&quot;100&quot; Content=&quot;OK!&quot;

            FontSize=&quot;20&quot; Background=&quot;Green&quot; Foreground=&quot;Yellow&quot;/&gt;

  &lt;/Grid&gt;

&lt;/Page&gt;

Обратите внимание, что присвоенные свойствам значения представлены с помощью простого текста. Это может выглядеть как полное несоответствие типам данных, поскольку после создания такого элемента Button в коде C# данным свойствам будут присваиваться не строковые объекты, а значения специфических типов данных. Например, ниже показано, как та же самая кнопка описана в коде:

public void MakeAButton()

{

  Button myBtn = new Button();

  myBtn.Height = 50;

  myBtn.Width = 100;

  myBtn.FontSize = 20;

  myBtn.Content = &quot;OK!&quot;;

  myBtn.Background = new SolidColorBrush(Colors.Green);

  myBtn.Foreground = new SolidColorBrush(Colors.Yellow);

}

Оказывается, что инфраструктура WPF поставляется с несколькими классами преобразователей типов, которые будут применяться для трансформации простых текстовых значений в корректные типы данных. Такой процесс происходит прозрачно (и автоматически).

Тем не менее, нередко возникает потребность в присваивании атрибуту XAML намного более сложного значения, которое невозможно выразить посредством простой строки. Например, пусть необходимо построить специальную кисть для установки свойства Background элемента Button. Создать кисть подобного рода в коде довольно просто:

public void MakeAButton()

{

  ...

  // Необычная кисть для фона.

  LinearGradientBrush fancyBruch =

    new LinearGradientBrush(Colors.DarkGreen, Colors.LightGreen, 45);

  myBtn.Background = fancyBruch;

1 ... 477 478 479 480 481 482 483 484 485 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий