|
При выполнении в лабораторной работе упражнения №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>, действуют по умолчанию на все дочерние элементы, если аналогичные атрибуты в них не переопределены. В списках маркеры элементов можно менять или вообще отключать.
-
Запустите приложение,
поизменяйте размер окна и разберитесь с кодом
Результат будет таким


