WPF Series #2 Нова модель компонування

Спробую освятити деякі моменти, найцікавіші, як мені здається.

Так що з місця у кар'єр!

1. Що таке компонування (Layout)? Компонування, по суті, це модель організації інтерфейсу користувача.

2. Які мінуси компонування у WPF? Скільки часу ми витрачаємо для створення найпростішої форми у WinForms?

Витрачено: 2 хв. Скільки часу ми витрачаємо для створення найпростішої форми WPF?

3 хв для розташування та створення елементів і 4 хвилини для прибирання зайвих властивостей, використання колонок і рядків гриду. т.п.

Разом: 4 чи 7 хвилин, залежно від подальшого масштабування.

"SimpleAppV2.Window1" xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x= "http://schemas.microsoft.com/winfx/2006 /xaml" Title= "Проста форма" Height= "300" W >"568" WindowStyle= "ToolWindow" >

"0" Gr >"0" HorizontalAlignment= "Center" VerticalAlignment= "Top" >Введітьтекст

"1" Gr >"0" BorderThickness= "2" BorderBrush= "Silver" /> "1" Gr >"1" >Надіслати

Назвемо ці 2 хвилини – порогом мінімуму.

Час, як це не банально, головний бич організації UI в WPF — Ви можете створювати його кілька годин або більше, але поріг мінімуму, як мені здається, збільшився вдвічі.

На відміну від моделі Windows Forms, тут треба «думати вперед» над UI, навіть у найпростіших утилітах.

Тому простенькі програми, яким не потрібен Rich UI, краще писати на WinForms.

Також потрібно враховувати той факт, що наш додаток на WPF може бути перенесений до Web.

Мене тут дорікнули тим, що я не говорю людям, що можна це все робити з CodeПозаду.… Да естественно можно:

використання System.ComponentModel; за допомогою System.Windows; використання System.Windows.Controls; за допомогою System.Windows.Media;

простір імен SimpleAppV2 клас GeneratingSampleWindow /// /// Створення вікна зразка. /// public static void Generate() Gr >new Grid(); Вікно вікна = нове вікно WindowStyle = WindowStyle.ToolWindow, Висота = 300, Ш > Title = "Простаяформа" , Content = grid >;

ColumnDefinitioncolumnDefinition = новий ColumnDefinition < W >нова довжина сітки (100) >; RowDefinitionrowDefinition = новий RowDefinition < Height = new GridLength(40) >;

grid.ColumnDefinitions.Add(columnDefinition); grid.ColumnDefinitions.Add(newColumnDefinition()); grid.RowDefinitions.Add(newRowDefinition()); grid.RowDefinitions.Add(rowDefinition);

Label label = new Label Content = "ВведитеТекст" , HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Top >;

TextBox textBox = new TextBox BorderThickness = new Thickness(2), BorderBrush = (Brush)TypeDescriptor.GetConverter( typeof (Brush)).ConvertFromInvariantString( "Silver" ) >;

Button button = нова кнопка; SetGridColumnAndRow(сітка, мітка, 0, 0); SetGridColumnAndRow(сітка, текстове поле, 1, 0); SetGridColumnAndRow(сітка, кнопка, 1, 1); window.ShowDialog(); >

public static void SetGr >int Column, int Row) grid.Children.Add(element); Grid.SetColumn(element, Column); Grid.SetRow(елемент, рядок); > > >

3. Які плюси компоновки в WPF?

1) Наслідування властивості в логічному дереві. Свойства автоматично успадковуються від корневого елемента:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml" > "0" Background= "Red" >

Так просто ми сказали, що елементи однієї панелі будуть мати задник червоного кольору, а інший - срібного:

2) Масштабований вміст:

Тепер при локалізації не буде помилки, коли текст вилазить за межі контролю. Тепер нам не важливо, який DPI і найчастіше навіть дозвіл у монітора користувача, наше застосування буде добре виглядати рівно добре і на 15' і на плазмі 52'.

3) Вкладеність елементів дає нам переваги у побудові нестандартних контролів та у контролюванні вмісту.

4) Дублювання властивостей можна уникнути, використовуючи стилі та ресурси. 5) Зручний Binding.

Що таке Binding? Binding - Прив'язка.

До чого і як можна прив'язувати дані та об'єкти можна почитати тут: habrahabr.ru/blogs/net/41108, habrahabr.ru/blogs/net/41481

Чому він зручний?

a) Його не слід описувати в Code Behind. b) До речі, можна його і продемонструвати:

Page xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml" > ;

Page xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml" > ;

Page xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml" > ;

6) Код, який керує елементами вікна можна перенести практично повністю на саму компонування вікна.

7) Легка переносимість у Web (XBAP/WPF/E (Silverlight)).

8) Легка модернізація.

9)Поділ коду/дизайну, який дозволяє працювати над UI дизайнеру, так, що згодом він не зіпсується при переобробці програмістом.

4. До чого приводить та дає нова модель компонування?

2) Легка та зручна анімація.

Але про це вже у наступній статті:)

Хардкорна конфа за С++. Ми запрошуємо лише профі.