|
При выполнении в лабораторной работе упражнения №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
Упражнение 3. Работа в WPF с HTML-документами
Поскольку XAML -формат документов и сама технология WPF являются относительно новыми, может потребоваться применить WPF к уже наработанному большому массиву HTML -документов. Для этого в WPF имеется класс System.Windows.Controls.WebBrowser. Его не нужно путать с одноименным классом System.Windows.Forms.WebBrowser технологии Windows Forms. Описание WebBrowser приведено в
http://msdn.microsoft.com/ru-ru/library/system.windows.controls.webbrowser.aspx
В этом упражнении мы познакомимся с применением WebBrowser WPF к просмотру HTML -документов, а также с преобразованием HTML в рассмотренные ранее XAML -документы нефиксированного формата.
-
Добавьте к решению
командой File/Add/New Project новый проект WpfText3 типа WPF Application и
назначьте его стартовым
Просмотр HTML-документов в WebBrowser
-
В декларативный раздел XAML добавьте контейнер <TabControl> с вкладкой <TabItem Header="HTML1">
-
Заполните файл Window1.xaml следующим кодом
<Window x:Class="WpfText3.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1"
Height="300" Width="300"
Background="LightGray"
>
<TabControl>
<TabItem Header="HTML1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<WebBrowser Grid.Row="0" Name="webBrowser1" />
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center">
<Button Width="75" Content="Back" Click="backButton_Click" Margin="0,5,0,0" />
<Button Width="75" Content="Load" Click="loadButton_Click" Margin="5,5,5,0" />
<Button Width="75" Content="Forward" Click="forwardButton_Click" Margin="0,5,0,0" />
</StackPanel>
</Grid>
</TabItem>
</TabControl>
</Window>-
Обработчики события Click кнопок заполните так
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 WpfText3
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void loadButton_Click(object sender, RoutedEventArgs e)
{
Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
openFileDialog.Filter = "HTML Documents (*.htm; *.html)|*.htm;*.html";
openFileDialog.InitialDirectory = System.IO.Directory.GetCurrentDirectory();
openFileDialog.Multiselect=false;
if (openFileDialog.ShowDialog() == false || openFileDialog.FileName == String.Empty)
return;
Uri uri = new Uri(openFileDialog.FileName);
this.webBrowser1.Source = uri;
}
private void backButton_Click(object sender, RoutedEventArgs e)
{
if (this.webBrowser1.CanGoBack)
{
this.webBrowser1.GoBack();
}
}
private void forwardButton_Click(object sender, RoutedEventArgs e)
{
if (this.webBrowser1.CanGoForward)
{
this.webBrowser1.GoForward();
}
}
}
}-
Запустите проект -
получится нормальный инструмент просмотра HTML -документов
Отображение HTML-текста в WebBrowser из файла
Обратите внимание, что в предыдущем примере автоматически появляются полосы прокрутки, если HTML -документ не помещается в окне элемента WebBrowser. Фрагмент форматированного HTML -текста включать прямо в WebBrowser нельзя, поскольку XAML -редактор оболочки сразу начнет ругаться. Но во время выполнения загружать файл из кода можно.
В данном примере мы заранее создадим HTML -файл с простым форматированным текстом.
-
В Solution Explorer вызовите контекстное меню для узла WpfText3 и командой Add/Existing Item добавьте к проекту файл HtmlDoc.htm из прилагаемого каталога Source (или
создайте свой HTML -документ и добавьте его к проекту той же командой)
Содержимое файла будет примерно таким
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<!--
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
-->
</head>
<body style="font-family:Arial, Helvetica, sans-serif">
<h2 align="center"><font color="#FF0000">Это небольшой фрагмент чистого HTML-текста</font></h2>
<ol>
<li>Шрифт Arial</li>
<li><font color="#0000FF">Цвет font color="#0000FF"</font></li>
<li><font face="Courier New">Шрифт Courier New </font></li>
<li><b>Стиль полужирный <b> </b></li>
<li><i>Стиль Italic <i> </i></li>
</ol>
</body>
</html>-
Выделите этот файл
и в панели Properties настройте его свойства так- Build Action = None
- Copy to Output Directory=Copy if newer
-
В декларативный раздел XAML в контейнер <TabControl> добавьте новую вкладку <TabItem Header="HTML2">
-
Заполните ее
следующим скриптом
<TabItem Header="HTML2" Selector.IsSelected="True">
<WebBrowser x:Name="webBrowser2" Initialized="webBrowser2_Initialized" />
</TabItem>-
Обработчик события Initialized заполните так
private void webBrowser2_Initialized(object sender, EventArgs e)
{
Uri uri = new Uri(System.IO.Directory.GetCurrentDirectory() +
"\\HtmlDoc.htm", UriKind.Absolute);
this.webBrowser2.Navigate(uri);
}Здесь мы применили несколько иной способ загрузки файла!
-
Запустите проект -
получится примерно следующее
Вертикальную полосу прокрутки мне убрать в этом примере не удалось.
Отображение HTML-текста в WebBrowser из потока
Рассмотрим способ подключения HTML -текста из потока. В качестве источника текста будем использовать все тот же файл из предыдущего примера, полагая, что он будет находиться в одном каталоге со сборкой приложения в силу определенных нами ранее для него параметров.
-
В декларативный раздел XAML в контейнер <TabControl> добавьте новую вкладку <TabItem Header="HTML3">
-
Заполните ее следующим
скриптом
<TabItem Header="HTML3" Selector.IsSelected="True">
<WebBrowser x:Name="webBrowser3" Initialized="webBrowser3_Initialized" />
</TabItem>-
Обработчик события Initialized заполните так
private void webBrowser3_Initialized(object sender, EventArgs e)
{
Uri uri = new Uri("HtmlDoc.htm", UriKind.Relative);
System.IO.Stream source = Application.GetRemoteStream(uri).Stream;
this.webBrowser3.NavigateToStream(source);
}-
Запустите проект -
получится то же самое, что в предыдущем примере
Еще один способ загрузки HTML-документа из потока
-
В декларативный раздел XAML в контейнер <TabControl> добавьте новую вкладку <TabItem Header="HTML4">
-
Заполните ее следующим
скриптом
<TabItem Header="HTML4" Selector.IsSelected="True">
<WebBrowser x:Name="webBrowser4" Initialized="webBrowser4_Initialized" />
</TabItem>-
Обработчик события Initialized заполните так
private void webBrowser4_Initialized(object sender, EventArgs e)
{
string path = System.IO.Directory.GetCurrentDirectory() + "\\HtmlDoc.htm";
System.IO.StreamReader streamReader = new System.IO.StreamReader(
path, Encoding.GetEncoding(1251));
//MessageBox.Show(streamReader.CurrentEncoding.CodePage.ToString());
string text = streamReader.ReadToEnd();
webBrowser4.NavigateToString(text);
}-
Обязательно
закомментируйте или удалите HTML-дескриптор <meta> в документе HtmlDoc.htm, иначе будут проблемы с кодировкой "Кириллица
(Windows) - 1251" в
этом примере HTML4
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<!--
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
-->
</head>
<body style="font-family:Arial, Helvetica, sans-serif">
<h2 align="center"><font color="#FF0000">Это небольшой фрагмент чистого HTML-текста</font></h2>
<ol>
<li>Шрифт Arial</li>
<li><font color="#0000FF">Цвет font color="#0000FF"</font></li>
<li><font face="Courier New">Шрифт Courier New </font></li>
<li><b>Стиль полужирный <b> </b></li>
<li><i>Стиль Italic <i> </i></li>
</ol>
</body>
</html>-
Запустите проект -
получится то же самое, что в предыдущем примере



