При выполнении в лабораторной работе упражнения №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" или один из зависимых от них компонентов. Не удается найти указанный файл. Делаю все пунктуально. В чем может быть проблема? |
Опубликован: 05.08.2010 | Уровень: специалист | Доступ: платный
Самостоятельная работа 10:
Текст WPF
- Зарегистрированные в элементах TextBox обработчики событий TextChanged заполните в файле Window1.xaml.cs
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 WpfText1 { public partial class Window1 : Window { public Window1() { InitializeComponent(); // Заполняем коллекции и подключаем их к спискам ListBox this.fontFamilyListBox.ItemsSource = FontPropertyLists.FontFaces; this.fontWeightListBox.ItemsSource = FontPropertyLists.FontWeights; this.fontSizeListBox.ItemsSource = FontPropertyLists.FontSizes; // Выполняется после XAML this.fontSizeListBox.SelectedIndex = this.fontSizeListBox.Items.Count - 1; this.fontSizeListBox.ScrollIntoView(this.fontSizeListBox.Items.Count - 1); } // Сокрытие унаследованных от Window одноименных свойств new public FontFamily FontFamily { get { return (FontFamily)this.fontFamilyListBox.SelectedItem; } set { this.fontFamilyListBox.SelectedItem = value; // Выделить this.fontFamilyListBox.ScrollIntoView(value); // Прокрутить до видимого } } new public FontWeight FontWeight { get { return (FontWeight)this.fontWeightListBox.SelectedItem; } set { this.fontWeightListBox.SelectedItem = value; // Выделить this.fontWeightListBox.ScrollIntoView(value); // Прокрутить до видимого } } new public double FontSize { get { return (double)this.fontSizeListBox.SelectedItem; } set { this.fontSizeListBox.SelectedItem = value; // Выделить this.fontSizeListBox.ScrollIntoView(value); // Прокрутить до видимого } } private void fontFamilyTextBox_TextChanged(object sender, TextChangedEventArgs e) { // Привести ListBox в соответствие с содержимым TextBox this.FontFamily = new FontFamily(this.fontFamilyTextBox.Text); } private void fontWeightTextBox_TextChanged(object sender, TextChangedEventArgs e) { // Привести ListBox в соответствие с содержимым TextBox if (FontPropertyLists.CanParseFontWeight(this.fontWeightTextBox.Text)) { this.FontWeight = FontPropertyLists.ParseFontWeight(this.fontWeightTextBox.Text); } } private void fontSizeTextBox_TextChanged(object sender, TextChangedEventArgs e) { // Привести ListBox в соответствие с содержимым TextBox double fontSize; if (double.TryParse(this.fontSizeTextBox.Text, out fontSize)) { this.FontSize = fontSize; // В поле действительно число } } } }
- Запустите проект - получим инструмент для просмотра основных атрибутов библиотечного текстового элемента Label
- Обратите внимание, как компоновка окна сохраняется при изменении его размеров и что окно имеет минимальный размер. Разберитесь с кодом разметки и процедурным кодом C#
Элемент TextBlock с анимацией
Текстовый элемент TextBlock поддерживает способы программирования Windows и стили Web. Он обладает развитыми средствами анимации и динамического программирования стилей. Настройки элемента можно задавать в декларативном ( XAML ) и процедурном ( C# ) режимах. Проиллюстрируем некоторые возможности элемента TextBlock на примере.
- Добавьте в файл Window1.xaml проекта WpfText1 вкладку TextBlock1 со следующей разметкой
<!--Вкладка TextBlock1--> <TabItem Header="TextBlock1"> <Border Background="Black"> <Border Margin="25" CornerRadius="50" BorderThickness="2" BorderBrush="Yellow"> <!--Радиальный градиент заливки Border--> <Border.Background> <RadialGradientBrush> <GradientStop Color="Blue" Offset="0.1" /> <!--Непрозрачный alfa-канал и 000000 (Black)--> <GradientStop Color="#FF000000" Offset="1.2" /> </RadialGradientBrush> </Border.Background> <!--Анимация градиентной подсветки внешнего контура Border--> <Border.BitmapEffect> <OuterGlowBitmapEffect x:Name="glow" GlowColor="Yellow" GlowSize="0" /> </Border.BitmapEffect> <Border.Triggers> <EventTrigger RoutedEvent="Border.Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="glow" Storyboard.TargetProperty="GlowSize" From="30" To="0" Duration="0:0:1" AutoReverse="True" RepeatBehavior="Forever" /> </Storyboard> </BeginStoryboard> </EventTrigger> </Border.Triggers> <!--Текстовый блок--> <TextBlock Name="text" Text="" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontSize="16" Initialized="text_Initialized" > <TextBlock.Inlines> <Bold>Это текстовый</Bold> <LineBreak /> <Italic>элемент TextBlock</Italic> <LineBreak /> <Run FontWeight="Bold" Foreground="Red"> Очень </Run> <Run FontStyle="Italic" TextDecorations="Underline" Foreground="Yellow"> красивый </Run> </TextBlock.Inlines> <!--Действия в TextBlock--> <TextBlock.LayoutTransform> <RotateTransform x:Name="rotateTransform" Angle="0" /> </TextBlock.LayoutTransform> <TextBlock.Triggers> <!--Анимация поворота--> <EventTrigger RoutedEvent="TextBlock.MouseDown"> <EventTrigger.Actions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="rotateTransform" Storyboard.TargetProperty="Angle" From="0" To="360" Duration="0:0:3" RepeatBehavior="2x" /> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> <!--Анимация изменения размера при заходе мыши--> <EventTrigger RoutedEvent="TextBlock.MouseEnter"> <EventTrigger.Actions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="text" Storyboard.TargetProperty="FontSize" To="26" Duration="0:0:0.2" /> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> <!--Анимация изменения размера при сходе мыши--> <EventTrigger RoutedEvent="TextBlock.MouseLeave"> <EventTrigger.Actions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="text" Storyboard.TargetProperty="FontSize" Duration="0:0:1" /> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> </TextBlock.Triggers> </TextBlock> </Border> </Border> </TabItem>
- Добавьте в процедурную часть (файл Window1.xaml.cs ) код обработчика события Initialized элемента TextBlock, который в динамическом режиме дополняет декларативную настройку этого текстового элемента
private void text_Initialized(object sender, EventArgs e) { // Добавляем в TextBlock строку Run run = new Run("\nDynamic"); run.FontFamily = new FontFamily("Curlz MT"); text.Inlines.Add(run); run = new Run("Text"); run.FontFamily = new FontFamily("Comic Sans MS"); run.Foreground = Brushes.Aqua; text.Inlines.Add(new Bold(run)); }
- Запустите проект - получим анимационный текст с персональными настройками стилей
- Изучите приведенный код