| При выполнении в лабораторной работе упражнения №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  и
    назначьте его стартовым Добавьте к решению
    новый проект WpfText2  типа WPF Application  и
    назначьте его стартовым
- 
 В декларативный раздел XAML  добавьте контейнер <TabControl>  с вкладкой <TabItem Header="Text1"> В декларативный раздел XAML  добавьте контейнер <TabControl>  с вкладкой <TabItem Header="Text1">
- 
 Заполните файл Window1.xaml     следующим кодом Заполните файл 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">  и заполните ее следующим кодом В  контейнер <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">  и
    заполните ее следующим кодом В контейнер <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>, действуют по умолчанию на все дочерние элементы, если аналогичные атрибуты в них не переопределены. В списках маркеры элементов можно менять или вообще отключать.
- 
 Запустите приложение,
    поизменяйте размер окна и разберитесь с кодом Запустите приложение,
    поизменяйте размер окна и разберитесь с кодом
Результат будет таким
 
                             


