|
При выполнении в лабораторной работе упражнения №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));
}-
Запустите проект -
получим анимационный текст с персональными настройками стилей
-
Изучите приведенный
код

