При выполнении в лабораторной работе упражнения №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
Страница 3. Использование линейной градиентной кисти LinearGradientBrush
Одну из альтернатив однородных кистей составляют градиентные кисти с постепенным переходом шлейфа двух и более цветов. В простейшем случае для создания линейной градиентной кисти достаточно двух крайних точек с определенными в них цветами. Градиентный шлейф будет строиться вдоль соединяющей эти точки прямой линии перпендикулярно ей и заливать всю поверхность ограничивающего прямоугольника, внутри которого находится определяющий отрезок.
Конструктор объекта линейной градиентной кисти имеет несколько перегрузок, в одних из которых задаются две точки и два цвета; два цвета, начальная точка привязки вектора градиента и угол его направления закраски. Точки могут задавать относительные (по умолчанию) и абсолютные координаты в рамках ограничивающего прямоугольника, что определяется свойством MappingMode и его значением из перечисления BrushMappingMode.
- Создайте новую страницу Page3 в файле CreateBrushes.cs, демонстрирующую один из вариантов линейной градиентной закраски
namespace WpfApp1 { class Page3 : Page { public Page3() { this.WindowTitle = "Page3: Кисть LinearGradientBrush"; Button btn = new Button(); btn.Content="Next Page4"; btn.Click += new RoutedEventHandler(btn3_Click); this.Content = btn; // Создание и присоединение градиента LinearGradientBrush brush = new LinearGradientBrush( Colors.Red, Colors.Blue, new Point(0, 0), new Point(1, 1)); btn.Background = brush; } // Переход на следующую страницу void btn3_Click(object sender, RoutedEventArgs e) { } } }
- Вставьте в обработчик кнопки перехода на следующую страницу в классе Page2 код создания экземпляра Page3
// Переход на следующую страницу Page3 page3; void btnPage2_Click(object sender, RoutedEventArgs e) { if (!this.NavigationService.CanGoForward) page3 = new Page3();// Создаем только один раз this.NavigationService.Navigate(page3); }
- Запустите приложение и испытайте работу класса Page3 в составе навигационного каркаса
Страница 4. Периодическая смена направления градиента
Если отрезок меньше ограничивающего прямоугольника, то за крайними точками градиент цветности может сменить направление на противоположное и заливка продолжится с такой же интенсивностью, что и на определяющем отрезке. Такое поведение кисти LinearGradientBrush определяется наследуемым от GradientBrush свойством SpreatMethod и его значением из перечисления GradientSpreadMethod.
- Создайте новую страницу Page4 в файле CreateBrushes.cs, демонстрирующую волнообразную градиентную закраску
namespace WpfApp1 { class Page4 : Page { public Page4() { this.WindowTitle = "Page4: GradientSpreadMethod.Reflect"; Button btn = new Button(); btn.Content = "Next Page5"; btn.Click += new RoutedEventHandler(btn4_Click); this.Content = btn; // Создание и присоединение градиента LinearGradientBrush brush = new LinearGradientBrush( Colors.Red, Colors.Blue, new Point(0, 0), new Point(0.25, 0.25)); brush.SpreadMethod = GradientSpreadMethod.Reflect; btn.Background = brush; } // Переход на следующую страницу void btn4_Click(object sender, RoutedEventArgs e) { } } }
- Вставьте в обработчик кнопки перехода на следующую страницу в классе Page3 код создания экземпляра Page4
// Переход на следующую страницу Page4 page4; void btn3_Click(object sender, RoutedEventArgs e) { if (!this.NavigationService.CanGoForward) page4 = new Page4();// Создаем только один раз this.NavigationService.Navigate(page4); }
- Запустите приложение и испытайте работу класса Page4 с периодической сменой направления линейного градиента
Страница 5. Ступенчатая закраска градиентами
У линейного градиента есть коллекция GradientStops, содержащая объекты GradientStop. Каждый из объектов коллекции задает начальный цвет градиента и правую границу полного перекрытия этим цветом предыдущего. В такой модели дополнительно используются точки границ закраски, определяемые свойствами StartPoint и EndPoint. Для иллюстрации создадим страницу, поместим на нее кнопку и закрасим кнопку вертикальными градиентами.
- Создайте новую страницу Page5 в файле CreateBrushes.cs, поместите на нее кнопку и закрасьте вертикальными градиентами с помощью следующего кода
namespace WpfApp1 { class Page5 : Page { public Page5() { this.WindowTitle = "Page5: Закраска цветами радуги"; Button btn = new Button(); this.Content = btn; btn.Content = "Next Page6"; btn.Click += new RoutedEventHandler(btn5_Click); // Создание и присоединение градиента LinearGradientBrush brush = new LinearGradientBrush(); btn.Background = brush; brush.StartPoint = new Point(0, 0); brush.EndPoint = new Point(1, 0); // Цвета радуги brush.GradientStops.Add(new GradientStop(Colors.Red, 0)); brush.GradientStops.Add(new GradientStop(Colors.Orange, .17)); brush.GradientStops.Add(new GradientStop(Colors.Yellow, .33)); brush.GradientStops.Add(new GradientStop(Colors.Green, .5)); brush.GradientStops.Add(new GradientStop(Colors.CornflowerBlue, .67)); brush.GradientStops.Add(new GradientStop(Colors.Blue, .84)); brush.GradientStops.Add(new GradientStop(Colors.BlueViolet, 1)); } // Переход на следующую страницу void btn5_Click(object sender, RoutedEventArgs e) { } } }
- Вставьте в обработчик кнопки перехода на следующую страницу в классе Page4 код создания экземпляра Page5
// Переход на следующую страницу Page5 page5; void btn4_Click(object sender, RoutedEventArgs e) { if (!this.NavigationService.CanGoForward) page5 = new Page5();// Создаем только один раз this.NavigationService.Navigate(page5); }
- Запустите приложение и испытайте работу класса Page5, рисующего последовательные переливы цветов радуги
Страница 6. Закраска радиальным градиентом RadialGradientBrush
Радиальный градиент реализуется классом RadialGradientBrush. Следующий пример демонстрирует работу этого градиента
- Создайте новую страницу Page6 в файле CreateBrushes.cs и закрасьте ее с помощью следующего кода
namespace WpfApp1 { class Page6 : Page { public Page6() { this.WindowTitle = "Page6: Радиальный градиент"; // Создание и присоединение градиента RadialGradientBrush brush = new RadialGradientBrush(); this.Background = brush; // Цвета радуги brush.GradientStops.Add(new GradientStop(Colors.Red, 0)); brush.GradientStops.Add(new GradientStop(Colors.Orange, .17)); brush.GradientStops.Add(new GradientStop(Colors.Yellow, .33)); brush.GradientStops.Add(new GradientStop(Colors.Green, .5)); brush.GradientStops.Add(new GradientStop(Colors.CornflowerBlue, .67)); brush.GradientStops.Add(new GradientStop(Colors.Blue, .84)); brush.GradientStops.Add(new GradientStop(Colors.BlueViolet, 1)); } } }
- Вставьте в обработчик кнопки перехода на следующую страницу в классе Page5 код создания экземпляра Page6
// Переход на следующую страницу Page6 page6; void btn5_Click(object sender, RoutedEventArgs e) { if (!this.NavigationService.CanGoForward) page6 = new Page6();// Создаем только один раз this.NavigationService.Navigate(page6); }