13_Березина_Assembly_Resources_Image

advertisement
Классы Windows Presentation Foundation
System.Object
DispatcherObject
Application
DependencyObject
NavigationService
FrameworkTemplate
Visual
ContentElement
UIElement
FrameworkContentElement
Style
FrameworkElement
Page
Shape
TextBlock
ContentControl
RangeBase
TextBoxBase
Frame
Slider
TextBox
Window
ProgressBar
RichTextBox
NavigationWindow
ButtonBase
Grid
ItemsControl
Canvas
MenuBase
Menu
ContextMenu
HeaderedItemsControl
MenuItem
Button
Toolbar
Selector
RepeatButton
TabControl
ToggleButton
CheckBox
Panel
ToolBarTray
Control
RadioButton
ListBox
ListView
TreeView
ComboBox
Ресурсы WPF
 Два типа ресурсов WPF:
• объектные ресурсы (object resource) – определенный .NET-объект, который можно
использовать многократно; объектные ресурсы размещаются в словарях ресурсов
ResourceDictionary, которые определены во всех элементах, производных от
FrameworkElement или FrameworkContentElement.
• ресурсы сборки ( assembly resource) – двоичные данные, встроенные в
скомпилированную сборку.
Двоичные ресурсы WPF
 Двоичные файлы данных приложения WPF
• файлы ресурсов (Resource Files) - файлы данных, скомпилированные либо в
исполняемую, либо в библиотечную сборку WPF;
• файлы содержимого (Content Files) - автономные файлы данных, которые не
компилируются в сборку, но метаданные скомпилированной сборки содержат
информацию о них;
• файлы исходного узла (Site of Origin Files) - автономные файлы данных, не
имеющие связи с исполняемой сборкой WPF.
 Файлы ресурсов и содержимого добавляются в приложение с помощью MSBuild.
 WPF предоставляет для загрузки ресурсов несколько API.
Файлы ресурсов WPF
 Данные, скомпилированные в исполняемую или библиотечную сборку WPF, всегда
доступны приложению, но в случае их изменения требуется перекомпиляция приложения.
 В Visual Studio, чтобы скомпилировать двоичные данные в сборку как ресурс, файл с
данными надо добавить в проект и для свойства Build Action этого файла задать значение
Resource.
 Для доступа к файлам ресурсов, встроенных в сборку, в XAML используется
относительный или абсолютный URI, в коде можно использовать статический метод
GetResourceStream класса Application, возвращающий null, если ресурс не найден.
public static StreamResourceInfo GetResourceStream( Uri uriResource );
 Свойства класса StreamResourceInfo дают доступ к данным
public string ContentType { get; }
public Stream Stream { get; }
 В примере файл Tree.jpg с изображением был скомпилирован в сборку. Изображение
выводится в элемент управления Image.
private void Resource_Click(object sender, RoutedEventArgs e)
{
Uri image1_Uri = new Uri("/Tree.jpg", UriKind.Relative);
image1.Source = new BitmapImage(image1_Uri);
}
Файлы содержимого WPF
 Файл содержимого не компилируются в сборку, но в метаданных сборки есть
информация о нем. При изменении файла содержимого перекомпиляция приложения не
нужна.
 Чтобы скомпилировать двоичные данные как файл содержимого в Visual Studio, файл
надо добавить в проект и для свойства Build Action этого файла задать значение Content.
 Для доступа к файлам содержимого в XAML используется URI, в коде доступ к данным
можно получить с помощью статического метода GetContentStream класса Application.
public static StreamResourceInfo GetContentStream( Uri uriContent );
Файлы исходного узла WPF
 Файлы исходного узла - автономные файлы данных, которые не имеют связи с
исполняемой сборкой WPF. Используются в следующих случаях:
• файл не существует во время компиляции;
• возможно обновление файла данных без перекомпиляции сборки;
• файл данных имеет большой размер, и следует загружать его только по запросу.
 В Visual Studio можно скомпилировать двоичные данные как файл исходного узла, если
добавить его к проекту и задать значение None для его свойства Build Action.
Единственный результат – файл будет скопирован в каталог проекта.
 Для доступа к файлам в XAML можно использовать URI, для доступа в коде –
статический метод GetRemoteStream класса Application.
public static StreamResourceInfo GetRemoteStream( Uri uriRemote );
 В примере изображение из файла garden.jpg выводится в элемент управления Image.
private void Site_of_Origin_Click(object sender, RoutedEventArgs e)
{ try { image3.Source = new BitmapImage(
new Uri("C:\\Users\\Public\\Pictures\\Sample Pictures\\garden.jpg“,
UriKind.RelativeOrAbsolute));
}
catch(Exception ex) { MessageBox.Show(ex.Message); }
}
URI (Универсальный идентификатор ресурса)
 URI (universal resource identifier) – строка символов, кодирующая адрес
информационного ресурса. Спецификации URI определены в интернет-стандартах RFC
2396 и RFC 3986.
 Все элементы URI должны состоять только из символов базовой латиницы (символы из
кодировок Unicode/ISO 10646). Чтобы включить в них другие символы, их необходимо
преобразовать в формат UTF-8 и представить в виде %xx, где xx — шестнадцатеричный
код байта.
 Международный код ресурса IRI (international resource identifier) позволяет применять
символы Юникода. Спецификации IRI определены в стандарте RFC 3987.
 Класс Uri в .NET Framework версии 3.5, 3.0 с пакетом обновления 1 (SP1) и 2.0 с пакетом
обновления 1 (SP1) поддерживает IRI в соответствии со стандартом RFC 3987.
 Полный URI имеет вид
Протокол:// авторизация// путь к ресурсу на сервере ? запрос
Обязательным элементом полного URI является протокол, остальные элементы зависят
от протокола.
 Относительные URI могут использоваться, когда тем или иным способом определен
базовый URI. Относительные URI ресурсов указываются относительно базового URI.
Класс Uri
 Класс Uri обеспечивает объектное представление универсального кода ресурсов (URI),
а также простой доступ к его частям.
 После создания объекта Uri его свойства доступны только для чтения. Создание
объекта, который допускает изменение, поддерживает класс UriBuilder.
 Конструкторы класса (5) создают экземпляры Uri на основе строки кода URI и/или на
основе базовых и относительных Uri.
public Uri( string uriString );
public Uri( Uri baseUri, string relativeUri );
 Конструкторы анализируют URI, выполняют преобразования в канонический формат и
применяют необходимые escape-кодировки. Конструкторы бросают исключение
UriFormatException, если входные данные заданы неправильно.
 Конструкторы не проверяют, что объект Uri ссылается на доступный ресурс.
Интерфейс IUriContext
 Интерфейс IUriContext обеспечивает установку базового URI.
public interface IUriContext
{ Uri BaseUri { get; set; }
}
 Один из конструкторов класса Uri
public Uri( string uriString, UriKind uriKind );
позволяет указать, является ли строка URI относительным или абсолютным URI.
Перечисление UriKind имеет значения Absolute, Relative и RelativeOrAbsolute.
Фигуры(shapes) и рисунки(drawings)
DependencyObject
Visual
Freezable
UIElement
Animatable
 Фигуры (shapes) – это элементы управления.
FrameworkElement
Brush
Shape
Drawing
 Рисунки (drawing) – API для взаимодействия с
низкоуровневым механизмом композиции.
Ellipce
ImageDrawing
Line
GeometryDrawing
Path
Polygon
GeneralTransform
Geometry
Polyline
LineGeometry
Rectangle
RectangleGeometry
Image
 Классы, производные от
System.Windows.Shapes.Shape,
• поддерживают события, как и другие
элементы управления;
• участвуют в системе макета, их можно
разместить в любой контейнер компоновки;
• автоматически перерисовываются при
изменении размера, перемещении или
изменении свойств.
…
ImageSource
DrawingImage
BitmapSource
BitmapImage
CroppedBitmap
…
 Image – элемент управления для просмотра
ImageSource.
Элемент управления Image
 Класс Image представляет элемент управления для отображения изображений. Элемент
управления Image позволяет загружать изображения в форматах BMP, GIF, ICO, JPG,
PNG, WDP и TIFF.
public class Image : FrameworkElement, IUriContext { }
 Источник изображения передается элементу управления через свойство Source:
public ImageSource Source { get; set; }
 Размерами изображения можно управлять с помощью свойств Width и/или Height, для
управления растяжением изображения используются свойства Stretch и StretchDirection.
 Перечисление Stretch (тип свойства Stretch) имеет значения
None
Сохраняется исходный размер изображения.
Fill
Изображение растягивается(сжимается) для заполнения всего элемента
управления.
Uniform
Изображение растягивается(сжимается) для заполнения одного измерения
элемента управления с сохранением исходных пропорций.
UniformToFill
Изображение растягивается(сжимается) и обрезается для заполнения всего
элемента управления с сохранением исходных пропорций.
Класс ImageSource
 Класс ImageSource – абстрактный базовый класс для.DrawingImage и BitmapSource.
• Класс BitmapSource предоставляет средства для работы с растровыми
изображениями в форматах BMP, GIF, JPEG, PNG и TIFF.
• Класс DrawingImage поддерживает вывод объектов Drawing в элемент управления
Image.
 Класс BitmapSource имеет производный класс BitmapImage, специально определенный
для поддержки XAML.
 В класс BitmapImage добавлены дополнительные свойства BaseUri и UriSource для
загрузки растровых изображений.
public Uri BaseUri { get; set; }
public Uri UriSource { get; set; }
Класс CroppedBitmap
 Класс CroppedBitmap позволяет вырезать прямоугольную область из растрового
изображения.
Область определяется с помощью свойства SourceRect.
public Int32Rect SourceRect { get; set; }
 Структура Int32Rect содержит координаты X, Y левого верхнего угла , ширину и высоту
прямоугольной области внутри изображения.
 В примере из изображения, которое находится в словаре ресурсов главного окна как
элемент с ключом “Image_Waterfall”, вырезается прямоугольная область размером 512 x
384 с координатами левого верхнего угла (10, 20).
<Window.Resources>
<Window.Resources>
<BitmapImage x:Key="Image_Waterfall" UriSource="/WaterFall.jpg"/>
<BitmapImage x:Key="Image_Waterfall" UriSource="/WaterFall.jpg"/>
<CroppedBitmap x:Key="croppedImage"
<CroppedBitmap x:Key="croppedImage"
Source="{StaticResource Image_Waterfall}" SourceRect=«10 20 512 384"/>
Source="{StaticResource Image_Waterfall}" SourceRect=«10 20 512 384"/>
</Window.Resources>
</Window.Resources>
 Полученное изображение выводится в элемент управления Image.
<Image Height="75" HorizontalAlignment="Left" Margin="29,0,0,12" Name="image4"
Stretch="Uniform"
Width="127" Source="{StaticResource croppedImage}" />
Классы Toolbar и ToolBarTray
 Класс ToolBarTray представляет собой контейнер для элементов управления ToolBar,
управляет расположением, изменением размеров, операциями перетаскивания и
упорядочивания элементов управления ToolBar.
 В классе ToolBarTray поддерживается коллекция элементов ToolBar
public Collection<ToolBar> ToolBars { get; }
 Класс ToolBar является производным от класса ItemsControl и представляет собой
контейнер для элементов управления.
 В классе ToolBar определены свойства, которые можно использовать для его
размещения внутри контейнера ToolBarTray.
public int Band { get; set; }
public int BandIndex { get; set; }
Свойство OverflowMode класса Toolbar
 В классе ToolBar определено присоединенное свойство OverflowMode
public static void SetOverflowMode( DependencyObject element, OverflowMode mode ) ;
public static OverflowMode GetOverflowMode( DependencyObject element );
 Присоединенное свойство управляет размещением элементов в панели переполнения и
имеет тип OverflowMode – перечисление со значениями:
AsNeeded
Размещение элемента в панели переполнения зависит от доступного
пространства.
Always
Элемент всегда размещается в панели переполнения.
Never
Элемент никогда не размещается в панели переполнения.
 В примере элемент управления ComboBox всегда размещается в панели переполнения.
<ToolBar >
<Button>
<Image Source="{StaticResource Image_New}" />
</Button>
<ComboBox Width="120" SelectedIndex="0" ToolBar.OverflowMode="Always">
<ComboBoxItem > Green </ComboBoxItem>
<ComboBoxItem > Red </ComboBoxItem>
</ComboBox>
</ToolBar >
Download