При выполнении в лабораторной работе упражнения №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
- Добавьте на страницу Page2 именованную текстовую метку и гиперссылку для перехода на Page3, а также подпишитесь на событие Loaded страницы и на событие Click гиперссылки
<Page x:Class="WpfApp5.Page2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Page2" Loaded="Page_Loaded" > <StackPanel> <TextBlock TextAlignment="Center" FontSize="24">Страница 2</TextBlock> <TextBlock></TextBlock> <TextBlock>Приветствуем Вас дорогой </TextBlock> <Label Name="nameLabel"></Label> <TextBlock Margin="0,10"> <!--Отступ сверху--> <Hyperlink Click="LinkClicked">На страницу 3</Hyperlink> </TextBlock> </StackPanel> </Page>
Объекту Label мы присвоили имя, чтобы можно было обращаться к нему из кода.
- Добавьте в кодовую часть страницы Page2 публичное свойство, код присвоения текстовой метке переданного текста в обработчике события Loaded и код перехода на следующую страницу
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 WpfApp5 { public partial class Page2 : Page { public Page2() { InitializeComponent(); } string message; public string Message { set { message = value; } } private void Page_Loaded(object sender, RoutedEventArgs e) { nameLabel.Content = message; } private void LinkClicked(object sender, RoutedEventArgs e) { Page3 page3 = new Page3(); this.NavigationService.Navigate(page3); } } }
- Запустите приложение - информация передается, но только по щелчку на ссылке
По щелчку на кнопке навигации свежая информация из текстового поля не передается, потому что берется из журнала истории.
- Заполните разметку страницы Page3 следующим кодом
<Page x:Class="WpfApp5.Page3" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Page3"> <StackPanel> <!--Заголовок контекста страницы--> <TextBlock TextAlignment="Center" FontSize="24">Страница 3 <TextBlock.Margin>0,0,0,10</TextBlock.Margin> </TextBlock> <!--Первая кнопка--> <Button Content="Push Me!" FontSize="22" Height="50" Click="Button_Click"> <Button.Effect> <DropShadowEffect /> </Button.Effect> </Button> <!--Вторая кнопка--> <Button FontSize="22" Height="50" Margin="0,10" Click="Button_Click"> Кликни меня <Button.Effect> <DropShadowEffect /> </Button.Effect> <Button.Foreground> <LinearGradientBrush StartPoint="1,0" EndPoint="0,0"> <GradientStop Color="Red" Offset="0" /> <GradientStop Color="Orange" Offset=".17" /> <GradientStop Color="Yellow" Offset=".33" /> <GradientStop Color="Green" Offset=".5" /> <GradientStop Color="CornflowerBlue" Offset=".67" /> <GradientStop Color="Blue" Offset=".84" /> <GradientStop Color="BlueViolet" Offset="1" /> </LinearGradientBrush> </Button.Foreground> <Button.Background> <LinearGradientBrush StartPoint="0,0" EndPoint="1,0"> <GradientStop Color="Red" Offset="0" /> <GradientStop Color="Orange" Offset=".17" /> <GradientStop Color="Yellow" Offset=".33" /> <GradientStop Color="Green" Offset=".5" /> <GradientStop Color="CornflowerBlue" Offset=".67" /> <GradientStop Color="Blue" Offset=".84" /> <GradientStop Color="BlueViolet" Offset="1" /> </LinearGradientBrush> </Button.Background> </Button> </StackPanel> </Page>
Обработчик события Click в дескрипторах кнопок нужно прописывать вручную, чтобы оболочка создала их заготовки в файле кодовом части.
Прежде, чем заполнить кодовую часть страницы Page3, мы добавим к проекту новую форму, чтобы показать совместную работу технологий WPF и Windows Forms. В обработчик кнопок поместим код запуска формы.
- Добавьте к проекту WpfApp5 новую форму Form1
- Поместите на форму из панели Toolbox элемент DataGridView, установите его свойство Dock=Fill и добавьте через интеллектуальный дескриптор ( SmartTag ) пару столбцов
- Общий обработчик кнопок в кодовой части Page3 заполните так
private void Button_Click(object sender, RoutedEventArgs e) { Form1 frm = new Form1(); frm.ShowInTaskbar = false;// Не показывать кнопку формы в панели задач frm.Show(); }
- Запустите проект и полюбуйтесь на дизайн новой страницы, а также убедитесь, что по щелчку запускается форма Form1 с интерфейсом другой технологии
Этот пример иллюстирирует возможность совместного использования интерфейса Windows Forms и интерфейса WPF, но только на уровне отдельных окон. Смешивать интерфейсные компоненты разных технологий в одном окне нельзя, они построены на разных принципах. Но на уровне бизнес-логики вся мощь библиотеки .NET Framework и языка C# остается в распоряжении программиста.
Если программист реализует пользовательский интерфейс по технологии WPF, то он должен помнить, что WPF поддерживается только начиная с Windows XP (SP2), а в Windows 95, Windows 98, Windows 2000 - не поддерживается.