При выполнении в лабораторной работе упражнения №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
Упражнение 2. Поддержка документов нефиксированного формата
Классы-упаковки содержимого нефиксированного формата
- FlowDocumentReader
- RichTextBox
- FlowDocumentScrollViewer
- FlowDocumentPageViewer
имеют дочерний элемент FlowDocument. В свою очередь, FlowDocument задает строгую модель содержимого для своего дочернего содержимого. Дочерние элементы верхнего уровня, содержащиеся в FlowDocument, должны быть производными от Block и называются блочными. Допустимыми дочерними элементами верхнего уровня в FlowDocument являются следующие блоки:
Блок | Описание |
---|---|
Paragraph | Содержит текст, возможно форматированный. |
List | Содержит списки разного типа (нумерованный, маркированный и т. д.). |
Table | Содержит таблицы, похожие на таблицы Microsoft Word или HTML. |
BlockUIContainer | Содержит различные элементы пользовательского интерфейса, становящиеся частью размещения. |
Section | Содержит группу прочих блоков. Разделы удобны для применения общих атрибутов к группам блоков, например, одни и те же атрибуты шрифта для нескольких абзацев. |
Внутри блоков дополнительное форматирование текста обеспечивается элементами, которые называются внутристрочными элементами. К ним относятся
- элемент Bold
- элемент Italic
- элемент LineBreak
- элемент List
- элемент ListItem
- элемент Paragraph
- элемент Run
- элемент Section
- элемент Span
- элемент Underline
Внутристрочные элементы могут быть вложенными друг в друга внутри блока или вместе с родительским блоком вложены в другой блок.
Некоторые элементы могут дополнительно настраиваться, например, такими атрибутами, как
- BreakPageBefore=True" - начать с новой страницы
- FontSize="24" - размер шрифта
- Typography.Variants="Superscript" - надстрочный
- Typography.Variants="Subscript" - подстрочный
- TextIndent="25" - отступ первой строки блока
- TextIndent="-15" - выступ первой строки блока
- Margin="20,0,0,0" - отступ блока слева
- TextAlignment="Center" - текст посредине контейнера рендеринга (представления)
- MarkerStyle="None" - тип маркера в элементе List
Использование FlowDocument с контейнером по умолчанию
Создание экземпляра класса FlowDocument автоматически запускает родительский контейнер FlowDocumentReader, который размещает содержимое и имеет стандартную панель управления документом.
- Добавьте к решению новый проект WpfText2 типа WPF Application и назначьте его стартовым
- В декларативный раздел XAML добавьте контейнер <TabControl> с вкладкой <TabItem Header="Text1">
- Заполните файл Window1.xaml следующим кодом
<Window x:Class="WpfText2.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Background="LightGray" Title="Window1" MinHeight="300" MinWidth="300" Height="300" Width="300"> <TabControl> <TabItem Header="Text1"> <FlowDocument Background="White"> <Paragraph TextAlignment="Center" FontWeight="Bold"> Потоковый <Span Foreground="Red"> документ</Span> <Italic>с разбивкой на страницы</Italic> </Paragraph> <List MarkerStyle="Decimal" FontFamily="Arial"> <ListItem> <Paragraph>Первый элемент ListItem</Paragraph> </ListItem> <ListItem> <Paragraph>Второй элемент ListItem</Paragraph> </ListItem> <ListItem> <Paragraph>Третий элемент ListItem</Paragraph> </ListItem> </List> <Paragraph FontSize="12">Класс FlowDocument поддерживает списки, определения <Bold> <Span FontFamily="Comic Sans MS" FontSize="12" Foreground="Blue"> семейств шрифтов, цвет </Span> </Bold> размеры и стили. </Paragraph> </FlowDocument> </TabItem> </TabControl> </Window>
- Запустите приложение, поизменяйте размер окна и разберитесь с кодом
Результат будет таким
Использование контейнера RichTextBox
Оборачивание элемента FlowDocument в контейнер RichTextBox отключает панель навигации по тексту.
- В контейнер <TabControl> добавьте вкладку <TabItem Header="Text2" Selector.IsSelected="True"> и заполните ее следующим кодом
<TabItem Header="Text2" Selector.IsSelected="True"> <RichTextBox IsReadOnly="True" FontSize="21" > <FlowDocument Background="White"> <Paragraph TextAlignment="Center" FontWeight="Bold"> Потоковый <Span Foreground="Red">документ</Span> <Italic>обернут в RichTextBox</Italic> </Paragraph> <List MarkerStyle="LowerLatin" FontFamily="Arial" FontSize="14"> <ListItem> <Paragraph>Маркер LowerLatin</Paragraph> </ListItem> <ListItem> <Paragraph>Второй элемент ListItem</Paragraph> </ListItem> </List> <List MarkerStyle="Box" FontFamily="Arial" FontSize="14"> <ListItem> <Paragraph>Маркер Box</Paragraph> </ListItem> <ListItem> <Paragraph>Второй элемент ListItem</Paragraph> </ListItem> </List> <Paragraph FontSize="12">В родительском контейнере RichTextBox <Bold> <Span FontFamily="Comic Sans MS" FontSize="12" Foreground="Blue"> включен режим IsReadOnly="True" </Span> </Bold> и не появляется полоса прокрутки при длинном тексте </Paragraph> </FlowDocument> </RichTextBox> </TabItem>
Присоединенный к дескриптору вкладки атрибут Selector.IsSelected="True" позиционирует ее при открытии окна.
- Запустите приложение, поизменяйте размер окна и разберитесь с кодом
Результат будет таким
Использование контейнера FlowDocumentScrollViewer
Оборачивание элемента FlowDocument в контейнер FlowDocumentScrollViewer по умолчанию отключает панель инструментов документа и добавляет вертикальную панель прокрутки, которую можно настраивать. Вертикальная полоса прокрутки включается с помощью присоединенного свойства. Панель инструментов включается свойством IsToolBarVisible="True" (по умолчанию IsToolBarVisible="False" ).
FlowDocument - единственный допустимый дочерний элемент объекта FlowDocumentScrollViewer. В FlowDocumentScrollViewer может быть размещен не более чем один элемент FlowDocument.
- В контейнер <TabControl> добавьте вкладку <TabItem Header="Text3"> и заполните ее следующим кодом
<TabItem Header="Text3"> <FlowDocumentScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto" IsToolBarVisible="False" > <FlowDocument Background="White" FontSize="14"> <Paragraph TextAlignment="Center" FontWeight="Bold"> FlowDocument <Italic>помещен в</Italic> <Span Foreground="Red">FlowDocumentScrollViewer</Span> </Paragraph> <List MarkerStyle="None" FontFamily="Arial"> <ListItem> <Paragraph>Буря мглою небо кроет</Paragraph> </ListItem> <ListItem> <Paragraph>Вихри снежные крутя.</Paragraph> </ListItem> <ListItem> <Paragraph>То как зверь она завоет</Paragraph> </ListItem> <ListItem> <Paragraph>То заплачет как дитя.</Paragraph> </ListItem> </List> <Paragraph TextAlignment="Left" FontSize="12">Текст нефикированного формата FlowDocument нужно заключать в параграфы (абзацы), внутри которых можно применять стилевые элементы. </Paragraph> <Paragraph> <Bold> <Span FontFamily="Comic Sans MS" FontSize="12" Foreground="Blue"> Буря мглою небо кроет вихри снежные крутя. <LineBreak /> </Span> </Bold> То как зверь она завоет, то заплачет как дитя. </Paragraph> </FlowDocument> </FlowDocumentScrollViewer> </TabItem>
Присоединенный к дескриптору <FlowDocumentScrollViewer> атрибут ScrollViewer.VerticalScrollBarVisibility="Auto" обеспечивает автоматическое появление полосы прокрутки, если текст не помещается на экране. Атрибуты, установленные в контейнере <FlowDocument>, действуют по умолчанию на все дочерние элементы, если аналогичные атрибуты в них не переопределены. В списках маркеры элементов можно менять или вообще отключать.
- Запустите приложение, поизменяйте размер окна и разберитесь с кодом
Результат будет таким