|
При выполнении в лабораторной работе упражнения №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 | Доступ: свободный | Студентов: 2011 / 47 | Оценка: 4.50 / 4.40 | Длительность: 60:26:00
Тема: Программирование
Специальности: Программист, Архитектор программного обеспечения
Самостоятельная работа 10:
Текст WPF
Элемент TextBlock с текстурой символов
Текст в элементе TextBlock можно закрашивать произвольным рисунком.
-
В панели Solution
Explorer создайте
для корня дерева проекта папку Images и добавьте в нее (командой Add ) из
прилагаемого к работе каталога Source файлы Image1.jpg и Image2.png
-
Добавьте в файл Window1.xaml новую вкладку со следующей разметкой
<!--Вкладка TextBlock2-->
<TabItem Header="TextBlock2">
<Canvas Background="Black">
<TextBlock
Canvas.Left = "10"
Canvas.Top="10"
FontFamily="Arial"
FontSize="36"
Foreground="Red"
Text="SolidColorBrush"
/>
<TextBlock
Canvas.Left = "10"
Canvas.Top="50"
FontFamily="Arial"
FontSize="75"
Text="Image1">
<TextBlock.Foreground>
<ImageBrush ImageSource="Images\Image1.jpg" Opacity=".9" />
</TextBlock.Foreground>
</TextBlock>
<TextBlock
Canvas.Left = "10"
Canvas.Top="130"
FontFamily="Arial"
FontSize="75"
Text="Image2">
<TextBlock.Foreground>
<ImageBrush ImageSource="Images/Image2.png" />
</TextBlock.Foreground>
</TextBlock>
</Canvas>
</TabItem>-
Запустите приложение
- должно получиться следующее
-
Изучите приведенный
код
Автоматический перенос слов в TextBlock
Если явно определить ширину элемента TextBlock и задать атрибут TextWraping="Wrap", то блочный текст будет автоматически размещаться внутри заданной ширины.
-
Добавьте в файл Window1.xaml новую вкладку со следующей разметкой
<!--Вкладка TextBlock3-->
<!-- Элемент TextBlock с переносом строк -->
<TabItem Header="TextBlock3">
<Grid Background="White">
<TextBlock
TextWrapping="Wrap"
FontSize="18"
TextAlignment="Center" >
Если в элементе TextBlock задать атрибут TextWraping="Wrap",
то блочный текст будет автоматически размещаться внутри
заданной ширины
<LineBreak />
<Run Foreground="Red" FontSize="28" FontFamily="Monotype Corsiva">
Панель Grid здесь введена для создания белого фона
</Run>
<LineBreak />
<Run FontSize="12">
Общие настройки родителя действуют на потомков до тех пор,
пока не будут переопределены внутри самих потомков
</Run>
</TextBlock>
</Grid>
</TabItem>-
Запустите приложение
- должно получиться следующее
-
Изучите приведенный
код
Использование дополнительных шрифтов
Иногда нет уверенности в том, что на компьютере пользователя есть нужные шрифты, с использованием которых программист разрабатывает интерфейс. В таком случае шрифты можно поставлять вместе с приложением.
-
Перейдите в раздел "Панель
управления", откройте папку " Шрифты " и перетащите мышью шрифт,
например, "Monotype
Corsiva" в какую-нибудь папку (файл шрифта уже есть в прилагаемом каталоге Source ) -
В панели Solution
Explorer создайте в корне проекта папку Fonts, выделите ее и добавьте командой Project/Add Existing Item файл шрифта MTCORSVA.TTF
-
Добавьте в файл Window1.xaml новую вкладку со следующей разметкой
<!--Вкладка TextBlock4-->
<!-- Элемент TextBlock с дополнительным шрифтом -->
<TabItem Header="TextBlock4">
<Grid Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock
FontFamily="Fonts/MTCORSVA.TTF#Monotype Corsiva"
FontSize="20"
TextWrapping="Wrap"
TextAlignment="Justify"
Margin="10"
ToolTip="Элемент TextBlock с дополнительным шрифтом">
Шрифт для этого текста подключен явно и поставляется
вместе с приложением на тот случай, если у бедного
пользователя компьютер окажется еще беднее.
</TextBlock>
<TextBlock Grid.Row="1" Margin="10" TextWrapping="Wrap">
В этом блоке текста используется шрифт по умолчанию и
нет всплывающей подсказки ToolTip, а в верхнем блоке есть
</TextBlock>
</Grid>
</TabItem>-
Запустите приложение
- должно получиться следующее
-
Изучите приведенный
код
Элементы TextBox и PasswordBox
-
Добавьте к проекту
следующую вкладку со скриптовым кодом
<!--TextBox и PasswordBox-->
<TabItem Header="TextBox" Selector.IsSelected="True">
<StackPanel VerticalAlignment="Center" Margin="10">
<TextBlock HorizontalAlignment="Center">
<Run FontSize="14" FontWeight="Bold">
Элементы PasswordBox и TextBox
</Run>
</TextBlock>
<Grid Height="20" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Поле PasswordBox: " VerticalAlignment="Center" />
<PasswordBox Grid.Column="1" Name="passwordBox" />
</Grid>
<Grid Height="20" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Поле TextBox: " VerticalAlignment="Center" />
<TextBox Grid.Column="1" Name="textBox"></TextBox>
</Grid>
<Grid Height="20" />
<Grid HorizontalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="5" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Content="Показать" Click="Button_Click" />
<ToggleButton Grid.Column="2" Name="toggleButton" Content="EnabledPassword"
Checked="toggleButton_Checked" Unchecked="toggleButton_Checked"/>
</Grid>
</StackPanel>
</TabItem>-
Выделенную в разметке
кнопок регистрацию обработчиков наберите вручную -
Добавьте в кодовую
часть следующие обработчики
private void Button_Click(object sender, RoutedEventArgs e)
{
textBox.Text = passwordBox.Password;
}
bool flagState = true;
Brush color;
private void toggleButton_Checked(object sender, RoutedEventArgs e)
{
// Сохраняем первоначальный цвет кнопки
if (flagState)
{
color = toggleButton.Background;
flagState = false;
}
if (toggleButton.IsChecked == true)
{
passwordBox.IsEnabled = false;
toggleButton.Background = Brushes.Red;
}
else
{
passwordBox.IsEnabled = true;
toggleButton.Background = color;
}
}-
Запустите приложение,
поизменяйте размер окна и разберитесь с кодом
Результат будет таким



