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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 499 500 501 502 503 504 505 506 507 ... 642

                    CanExecute="OpenCmdCanExecute"/>

    <CommandBinding Command="ApplicationCommands.Save"

                    Executed="SaveCmdExecuted"

                    CanExecute="SaveCmdCanExecute"/>

  </Window.CommandBindings>

  <!-- Эта панель устанавливает содержимое окна -->

  <DockPanel>

  ...

  </DockPanel>

</Window>

Щелкните правой кнопкой мыши на каждом из атрибутов Executed и CanExecute в редакторе XAML и выберите в контекстном меню пункт Navigate to Event Handler (Перейти к обработчику события). Как объяснялось в главе 24, в результате автоматически сгенерируется заготовка кода для обработчика события. Теперь в файле кода C# для окна должны присутствовать четыре пустых обработчика событий.

Реализация обработчиков события CanExecute будет сообщать окну, что можно инициировать соответствующие события Executed в любой момент, для чего свойство CanExecute входного объекта CanExecuteRoutedEventArgs устанавливается в true:

private void OpenCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)

{

  e.CanExecute = true;

}

private void SaveCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)

{

  e.CanExecute = true;

}

Обработчики соответствующего события Executed выполняют действительную работу по отображению диалоговых окон открытия и сохранения файла; они также отправляют данные из TextBox в файл. Начните с импортирования пространств имен System.IO и Microsoft.Win32 в файл кода. Окончательный код прямолинеен:

private void OpenCmdExecuted(object sender, ExecutedRoutedEventArgs e)

{

  // Создать диалоговое окно открытия файла и показать

  // в нем только текстовые файлы.

  var openDlg = new OpenFileDialog { Filter = "Text Files |*.txt"};

  // Был ли совершен щелчок на кнопке ОК?

  if (true == openDlg.ShowDialog())

  {

    // Загрузить содержимое выбранного файла.

    string dataFromFile = File.ReadAllText(openDlg.FileName);

    // Отобразить строку в TextBox.

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

    txtData.Text = dataFromFile;

  }

}

private void SaveCmdExecuted(object sender, ExecutedRoutedEventArgs e)

{

  var saveDlg = new SaveFileDialog { Filter = "Text Files |*.txt"};

  // Был ли совершен щелчок на кнопке ОК?

  if (true == saveDlg.ShowDialog())

  {

    // Сохранить данные из TextBox в указанном файле.

    File.WriteAllText(saveDlg.FileName, txtData.Text);

  }

}

На заметку! Система команд WPF более подробно рассматривается в главе 28, где будут создаваться специальные команды на основе ICommand и RelayCommands.

Итак, пример и начальное знакомство с элементами управления WPF завершены. Вы узнали, как работать с базовыми командами, системами меню, строками состояния, панелями инструментов, вложенными панелями и несколькими основными элементами пользовательского интерфейса (вроде TextBox и Expander). В следующем примере вы будете иметь дело с более экзотическими элементами управления, а также с рядом важных служб WPF.

Понятие маршрутизируемых событий

Вы могли заметить, что в предыдущем примере кода передавался параметр RoutedEventArgs, а не EventArgs. Модель маршрутизируемых событий является усовершенствованием стандартной модели событий CLR и спроектирована для того, чтобы обеспечить возможность обработки событий в манере, подходящей описанию XAML дерева объектов. Предположим, что имеется новый проект приложения WPF по имени WpfRoutedEvents. Модифицируйте описание XAML начального окна, добавив следующий элемент управления Button, который определяет сложное содержимое:

<Window ...

  <Grid>

    <Button Name="btnClickMe" Height="75" Width = "250"

        Click ="btnClickMe_Clicked">

      <StackPanel Orientation ="Horizontal">

        <Label Height="50" FontSize ="20">

          Fancy Button!</Label>

        <Canvas Height ="50" Width ="100" >

          <Ellipse Name = "outerEllipse" Fill ="Green"

              Height ="25" Width ="50" Cursor="Hand"

1 ... 499 500 501 502 503 504 505 506 507 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

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