При выполнении в лабораторной работе упражнения №1 , а именно при выполнении нижеследующего кода: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Microsoft.Xna.Framework.Graphics;
namespace Application1 { public partial class MainForm : Form { // Объявим поле графического устройства для видимости в методах GraphicsDevice device;
public MainForm() { InitializeComponent();
// Подпишемся на событие Load формы this.Load += new EventHandler(MainForm_Load);
// Попишемся на событие FormClosed формы this.FormClosed += new FormClosedEventHandler(MainForm_FormClosed); }
void MainForm_FormClosed(object sender, FormClosedEventArgs e) { // Удаляем (освобождаем) устройство device.Dispose(); // На всякий случай присваиваем ссылке на устройство значение null device = null; }
void MainForm_Load(object sender, EventArgs e) { // Создаем объект представления для настройки графического устройства PresentationParameters presentParams = new PresentationParameters(); // Настраиваем объект представления через его свойства presentParams.IsFullScreen = false; // Включаем оконный режим presentParams.BackBufferCount = 1; // Включаем задний буфер // для двойной буферизации // Переключение переднего и заднего буферов // должно осуществляться с максимальной эффективностью presentParams.SwapEffect = SwapEffect.Discard; // Устанавливаем размеры заднего буфера по клиентской области окна формы presentParams.BackBufferWidth = this.ClientSize.Width; presentParams.BackBufferHeight = this.ClientSize.Height;
// Создадим графическое устройство с заданными настройками device = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, DeviceType.Hardware, this.Handle, presentParams); }
protected override void OnPaint(PaintEventArgs e) { device.Clear(Microsoft.Xna.Framework.Graphics.Color.CornflowerBlue);
base.OnPaint(e); } } } Выбрасывается исключение: Невозможно загрузить файл или сборку "Microsoft.Xna.Framework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d" или один из зависимых от них компонентов. Не удается найти указанный файл. Делаю все пунктуально. В чем может быть проблема? |
Создание приложений WPF
Упражнение 4. Пользовательские элементы управления в WPF
Пользователи среды разработки (программисты) делятся на две категории: те, кто разрабатывает законченные приложения и те, кто разрабатывает элементы управления, в том числе - интерфейсные (визуальные). Последние конструируют из библиотечных элементов укрупненные блоки, которые можно использовать при разработке интерфейса окон: пользовательские (user control) и нестандартные (custom control). Разработчик приложения сам, для удобства, может сконструировать разовый укрупненный блок user control, а затем использовать его при построении окна.
Таким образом, пользовательские элементы управления (user control) - это способ инкапсуляции (упаковки) частей графического интерфейса. Нестандартные графические элементы (custom control) - повторно используемые элементы, которые можно применять и в других приложениях.
В качестве базового для пользовательского элемента управления берется библиотечный класс ContentControl или производный от него UserControl из пространства имен System.Windows.Controls. В этом упражнении мы проиллюстрируем создание и применение пользовательских элементов управления на примере инкапсуляции кнопки Button.
- Добавьте к решению новый WPF-проект с именем WpfApp4 и назначьте его стартовым
- В панели Solution Explorer выделите узел проекта WpfApp4, в главном меню оболочки выполните команду Add User Control и добавьте к проекту новый файл с именем MyUserControl.xaml
- Модифицируйте интерфейсную часть пользовательского компонента следующим образом
<UserControl x:Class="WpfApp4.MyUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > <Button Click="Button_Click">Моя кнопка</Button> </UserControl>
using System; using System.Collections.Generic; using System.Text; 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 WpfApp4 { /// <summary> /// Interaction logic for MyUserControl.xaml /// </summary> public partial class MyUserControl : UserControl { public MyUserControl() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Привет всем!", "Элемент UserControl"); } } }
- Откомпилируйте (только откомпилируйте!) проект WpfApp4, чтобы создать пользовательский элемент для видимости его подсказчиком кода IntelliSense в файле окна
- Откройте на редактирование в режиме XAML файл Window1.xaml и измените его дескрипторный код так
<Window x:Class="WpfApp4.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:My="clr-namespace:WpfApp4" Title="Упражнение 4" Width="200" SizeToContent="Height" WindowStartupLocation="CenterScreen" > <StackPanel> <My:MyUserControl Margin="1"/> <My:MyUserControl Margin="1"/> </StackPanel> </Window>
В дескриптор окна Window мы добавили пользовательское пространство имен WpfApp4 с псевдонимом My, чтобы окно увидело пользовательский элемент. Мы жестко задали ширину окна и сказали, чтобы по высоте окно подстраивалось под свое содержимое. Мы установили начальное положение окна в центре экрана. В клиентскую область окна мы поместили контейнер с двумя экземплярами пользовательского элемента.
- Запустите на выполнение проект WpfApp4 и испытайте работу простого пользовательского элемента в составе окна приложения