При выполнении в лабораторной работе упражнения №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
Разработка дизайна элемента
Нарушим правило невмешательства в XAML для неопытных пользователей и в демонстрационных целях с помощью только дескрипторного кода создадим простое изображение мультимедийной кнопки. Каждый дескриптор имеет свой тип и атрибуты, уточняющие его настройку. Как и в языке XML, в XAML используется вложенность дескрипторов. Язык XAML чувствителен к регистру символов, поэтому нужно следовать указаниям подсказчика IntalliSense.
- Заполните вкладку XAML следующим кодом
<!-- Настройки всего окна --> <Window x:Class="WpfApp1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="300" Height="300" Title="Упражнение 1" x:Name="Window" Background="Aqua"> <!-- Секция Resources для хранения ресурсов окна приложения --> <Window.Resources> <!-- Создаем шаблон с названием ClassButton для элементов типа Button --> <ControlTemplate x:Key="ClassButton" TargetType="{x:Type Button}"> <!-- Секция для хранения ресурсов окна кнопки --> <ControlTemplate.Resources> <!-- Секция Storyboard для зажжения кнопки --> <Storyboard x:Key="Timeline1"> <!-- За установленное время 0.3 секунды кнопка становится непрозрачной --> <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="glow" Storyboard.TargetProperty="(UIElement.Opacity)"> <!-- Конечная точка анимации --> <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1" /> </DoubleAnimationUsingKeyFrames> </Storyboard> <!-- Секция Storyboard для затухания кнопки --> <Storyboard x:Key="Timeline2"> <!-- За установленное время 0.3 секунды кнопка становится прозрачной --> <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="glow" Storyboard.TargetProperty="(UIElement.Opacity)"> <!-- Конечная точка анимации --> <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0" /> </DoubleAnimationUsingKeyFrames> </Storyboard> </ControlTemplate.Resources> <!-- Секция для описания кнопки --> <!-- Наружная граница белая --> <Border BorderBrush="#FFFFFFFF" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4"> <!-- Внутренняя граница черная --> <Border x:Name="border" Background="#7F000000" BorderBrush="#FF000000" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4"> <Grid> <Grid.RowDefinitions> <!-- Верхняя половинка кнопки --> <RowDefinition Height="0.5*" /> <!-- Нижняя половинка кнопки --> <RowDefinition Height="0.5*" /> </Grid.RowDefinitions> <!-- Рисуем подсветку кнопки --> <Border Opacity="0" HorizontalAlignment="Stretch" x:Name="glow" Width="Auto" Grid.RowSpan="2" CornerRadius="4,4,4,4"> <Border.Background> <!-- Задаем радиальный градиент со смещением --> <RadialGradientBrush> <RadialGradientBrush.RelativeTransform> <TransformGroup> <ScaleTransform ScaleX="1.702" ScaleY="2.243" /> <SkewTransform AngleX="0" AngleY="0" /> <RotateTransform Angle="0" /> <TranslateTransform X="-0.368" Y="-0.152" /> </TransformGroup> </RadialGradientBrush.RelativeTransform> <!-- Цвета градиента в формате ARGB --> <GradientStop Color="#B28DBDFF" Offset="0" /> <GradientStop Color="#008DBDFF" Offset="1" /> </RadialGradientBrush> </Border.Background> </Border> <!-- Рисуем блик --> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Width="Auto" Grid.RowSpan="2" /> <Border HorizontalAlignment="Stretch" x:Name="shine" Width="Auto" CornerRadius="4,4,0,0"> <Border.Background> <LinearGradientBrush StartPoint="0.494,0.028" EndPoint="0.494,0.889"> <GradientStop Color="#99FFFFFF" Offset="0" /> <GradientStop Color="#33FFFFFF" Offset="1" /> </LinearGradientBrush> </Border.Background> </Border> </Grid> </Border> </Border> <!-- Задаем тригеры, описывающие реакцию на события мыши --> <ControlTemplate.Triggers> <!-- Кнопка мыши нажата --> <Trigger Property="IsPressed" Value="True"> <Setter Property="Opacity" TargetName="shine" Value="0.4" /> <Setter Property="Background" TargetName="border" Value="#CC000000" /> <Setter Property="Visibility" TargetName="glow" Value="Hidden" /> </Trigger> <!-- Курсор над объектом --> <Trigger Property="IsMouseOver" Value="True"> <!-- Заходит на объект - вызываем анимацию Timeline1 --> <Trigger.EnterActions> <BeginStoryboard Storyboard="{StaticResource Timeline1}" /> </Trigger.EnterActions> <!-- Уходит с объекта - вызываем анимацию Timeline2 --> <Trigger.ExitActions> <BeginStoryboard Storyboard="{StaticResource Timeline2}" /> </Trigger.ExitActions> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Window.Resources> <Grid> <!-- Создаем экземпляр кнопки посредине окна --> <Button x:Name="Btn1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="176" Height="34" Content="Мультимедийная кнопка" Foreground="#FFFFFFFF" Template="{DynamicResource ClassButton}" /> </Grid> </Window>
- Запустите приложение - должно получиться следующее
- Выполните команду View/Other Windows/Document Outline (либо щелкните на пиктограмме слева внизу в строке навигатора рабочей области), чтобы открыть панель Document Outline (если она еще автоматически не открылась)
Мы видим дерево всех дескрипторных элементов, составляющих проект. В Visual Studio 2003 эта панель разрешала редактировать элементы, сейчас же она служит только для просмотра дерева дескрипторных элементов или для быстрой навигации по документу XAML. Обратите внимание, что корнем дерева объектов проекта является единственный класс, в нашем случае, - класс Window. Возможны другие варианты корневого объекта, например, Page. Но корень обязательно должен быть, причем, единственный. Он и определяет тип приложения - Web или Windows.
Посмотрите XAML-дескриптор внутри контейнера <Grid>, там размещен экземпляр кнопки Button, порожденный шаблоном ClassButton. Он и отображается на форме проекта. Контейнер <Grid> XAML подобен контейнеру содержимого <body> в HTML, которое отображается в окне (броузера или клиентского приложения). Все компоненты панели Toolbox, которые мы будем перетаскивать на форму WPF в режиме визуальной разработки интерфейса, будут представлены дескрипторами, размещенными в контейнере <Grid>.