Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Windows presentation foundation with - MacDonald M.

MacDonald M. Windows presentation foundation with — Вильямс , 2008. — 928 c.
ISBN 978-5-8459-1429-3
Скачать (прямая ссылка): wpfwindowspresente2008.pdf
Предыдущая << 1 .. 181 182 183 184 185 186 < 187 > 188 189 190 191 192 193 .. 473 >> Следующая

<Canvas>
<Ellipse Fill="Yellow" Stroke="Blue" Canvas.Left="100" Canvas.Top="50"
Width="100" Height="50"></Ellipse>
<Rectangle Fill="Yellow" Stroke="Blue" Canvas.Left="30" Canvas.Top="40"
Width="100" Height="50"></Rectangle>
</Canvas>
При использовании Canvas важен порядок следования дескрипторов. В предыдущем примере прямоугольник накладывается на эллипс, потому что эллипс идет в списке первым, а потому и рисуется первым (рис. 13.5).
Рис. 13.5. Перекрытие фигур в Canvas
Пропорциональное определение размеров в Viewbox
Единственное ограничение при использовании Canvas заключается в том, что ваша графика не сможет самостоятельно подгонять свои размеры к большему или меньшему окну. Это имеет смысл для кнопок (которые не меняют своего размера в любых ситуа-
Book Pro WPF-2.indb 365
1:10:24
366 Глава 13
циях), но не обязательно для графического содержимого других типов. Например, вы можете создать сложную графику, которая должна изменять свои размеры, чтобы получить преимущество от доступного пространства.
Для подобных ситуаций WPF предусматривает легкое решение. Если вы хотите сочетать тонкий контроль Canvas с простым изменением размеров, то вам стоит использовать элемент Viewbox. Элемент Viewbox — это простой класс, унаследованный от Decorator, с которым вы впервые встретились в главе 5. Он принимает единственный дочерний элемент, который растягивает или сжимает для заполнения доступного пространства.
Хотя вы можете поместить в Decorator единственную фигуру, это не дает никаких реальных преимуществ. Decorator проявляет себя во всей красе, когда вам необходимо обернуть группу фигур, составляющих общий рисунок. Затем вы просто помещаете контейнер компоновки вашего рисунка (обычно Canvas) внутрь Viewbox.
В следующем примере Decorator помещается во вторую строку Grid. Элемент Decorator занимает полную высоту и ширину строки. Строка занимает все свободное пространство, оставшееся после визуализации первой строки с автоматическим размером. Ниже приведен код разметки.
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock>The first row of a Grid.</TextBlock>
<Viewbox Grid.Row="1" HorizontalAlignment="Left" >
<Canvas Width="200" Height="150">
<Ellipse Fill="Yellow" Stroke="Blue" Canvas.Left="10" Canvas.Top="50" Width="100" Height="50" HorizontalAlignment="Left"></Ellipse>
<Rectangle Fill="Yellow" Stroke="Blue" Canvas.Left="30" Canvas.Top="40" Width="100" Height="50" HorizontalAlignment="Left"></Rectangle>
</Canvas>
</Viewbox>
</Grid>
На рис. 13.6 показано, как Viewbox изменяет себя при изменении размера окна. Первая строка остается неизменной. Однако вторая строка расширяется для заполнения всего свободного пространства. Как видите, фигура в Viewbox изменяется пропорционально по мере увеличения окна.
P 1 Viewbox Resize [ = Ш \т?Ы
The first row of a grid.


Рис. 13.6. Изменение размеров и Viewbox
Book Pro WPF-2.indb 366
!:10:24
Фигуры, трансформации и кисти 367
Как и все фигуры, Viewbox имеет свойство Stretch, но его значение по умолчанию — Uniform. Однако вы можете использовать любые другие значения из перечисленных в табл. 13.2. Можно получить несколько больший контроль, используя свойство StretchDirection. По умолчанию это свойство принимает значение Both, но вы можете применить UpOnly, чтобы создать содержимое, которое сможет расти, но не более своего исходного размера, и DownOnly, чтобы создать содержимое, которое может сжиматься, но не расти.
На заметку! Когда фигура изменяет размер, WPF изменяет ее внутренности и границы пропорционально. Это значит, что чем больше ваша фигура растет, тем толще становится ее граница.
Для того чтобы Viewbox продемонстрировал свое волшебство, он должен получать две единицы информации: обычный размер, который должно иметь ваше содержимое (как если бы оно не было внутри Viewbox), и новый размер, который вы хотите ему установить. Вторая деталь — новый размер — достаточно проста. Viewbox отводит внутреннему содержимому все доступное пространство, основываясь на значении своего свойства Stretch. Это значит, что чем больше Viewbox, тем больше его содержимое.
Первая деталь — обычный размер (без вмешательства Viewbox) — вычисляется по способу определения вложенного содержимого. В предыдущем примере Canvas задается явный размер 200x150 единиц. Таким образом, Viewbox масштабирует картинку от этого начального размера. Например, если эллипс изначально имеет ширину 100 единиц, т.е. заполняет половину выделенного Canvas пространства, то по мере роста Canvas элемент Viewbox сохраняет эти пропорции и эллипс продолжает занимать половину отведенного пространства.
Однако рассмотрим, что случится, если вы удалите свойства Width и Height из Canvas. Теперь Canvas задан размер 0x0 единиц, так что Viewbox не может изменить размер, и ваше вложенное содержимое не появляется. (Совсем иначе обстоят дела, когда вы работаете только с Canvas без Viewbox. Дело в том, что несмотря на то, что Canvas также имеет размеры 0x0, содержащимся в нем фигурам разрешено рисовать себя за его пределами, до тех пор, пока свойство Canvas.ClipToBounds не установлено в true. Элемент Viewbox не настолько терпим к ошибке подобного рода.)
Предыдущая << 1 .. 181 182 183 184 185 186 < 187 > 188 189 190 191 192 193 .. 473 >> Следующая