Программирование >>  Windows foundation 

1 [ 2 ] 3 4 5 ... 15


Свойства как элементы

Вместо использования атрибутов XML свойства также могут специфицировать дочерние элементы. Значение содержимого может быть непосредственно установлено указанием дочернего элемента для Button. Для всех свойств Button имя дочернего элемента определяется именем внешнего элемента, следующего за именем свойства:

<Button>

<Button.Background>

LightGreen </Button.Background> Click Me! </Button>

В предыдущем примере не обязательно было применять дочерние элемент:; используя атрибуте! XML, можно достичь того же результата. Однако применение атрибутов теперь невозможно, если значение сложнее строки. Например, фон может быть установлен только в простой цвет, но также и задан кистью (brush); например, кистью с линейным градиентом.

<Button>

<Button.Background>

<LinearGradientBrush StartPoint= 0,0 EndPoint= 1,1 > <GradientStop Color= Yellow Offset= 0.0 /> <GradientStop Color= Orange Offset= 0.25 /> <GradientStop Color= Red Offset= 0.75 /> <GradientStop Color= Violet Offset= 1.0 /> </LinearGradientBrush> </Button.Background>

Click Me! </Button>

Свойство зависимости

Изучая программирование с использованием WPF, вы часто будете встречать термин свойство зависимости (dependency property). Элементы WPF представляют собой классы с методами, свойствами и событиями. Почти каждое свойство элемента WPF является свойством зависимости. Что это значит? Свойство зависимости может зависеть от других входных параметров, например, тем и пользовательских предпочтений. Свойства зависимости применяются со связыванием данных, анимацией, ресурсами и стилями.

С точки зрения грамматики свойство зависимости может быть прочитано и записано не только вызовом строго типизированного свойства, но также методов, получающих объект свойства зависимости.

Только класс, унаследованный от базового класса DependencyObject, может включать свойства зависимости. Следующий класс - MyDependencyObject - определяет свойство зависимости SomeState. SomeStateProperty - это статическое поле типа DependencyProperty, обеспечивающее свойство зависимости. Свойство зависимости зарегистрировано в системе свойств зависимости WPF с помощью метода Register() . Метод Register() получает имя свойства зависимости, его тип и тип его владельца. Вы можете устанавливать значение свойства зависимости посредством метода SetValue() базового класса DependancyObject, а получать значение методом GetValue(). Свойства зависимости обычно также имеет строго типизированный доступ. Вместо использования методов базового класса DependancyObject класс MyDependancyObject включает свойство SomeState, вызывающее методы базового класса из реализации средств доступа set и get. Вы не должны делать что-то еще в реализации средств доступа set и get, поскольку они могут и не вызываться для этого свойства.



public class MyDependencyObject : DependencyObject

public static readonly DependencyProperty SomeStateProperty =

DependencyProperty.Register( SomeState , typeof(String), typeof(MyDependencyObject)); public string SomeState

get { return (string)this.GetValue(SomeStateProperty); }

set { this.SetValue(SomeStateProperty, value); }

В иерархии классов WPF класс DependencyObject находится очень высоко. Каждый элемент WPF наследуется от этого базового класса.

Присоединенное свойство

Элемент WPF также получает возможности родительского элемента. Например, если элемент Button находится внутри элемента Canvas, то кнопка имеет свойства Top и Left, снабженные префиксом - именем родительского элемента. Такое свойство называют присоединенным (attached) свойством.

<Canvas>

<Button Canvas.Top= 30 Canvas.Left= 4 0 >

Click Me! </Button> </Canvas>

Написание функциональности в отделенном коде слегка отличается, поскольку класс Button не имеет свойства Canvas.Top и Canvas.Left, даже если он содержится внутри класса Canvas.

Существует шаблон именования для установки присоединенных свойств, общий для всех классов. Класс, поддерживающий присоединенные свойства, имеет статические методы с именами Set<Property> и Get<Property>, где первый параметр - объект, к которому применено значение свойства. Класс Canvas определяет статические методы SetLeft() и SetTop() для получения того же результата, что и ранее показанный пример кода XAML.

[STAThread] static void Main()

Window mainWindow = new Window(); Canvas canvas = new Canvas(); mainWindow.Content = canvas; Button button1 = new Button(); canvas.Children.Add(button1); button1.Content = Click Me! ;

Canvas.SetLeft(button1, 40); Canvas.SetTop(button1, 30);

Application app = new Application(); app.Run(mainWindow);

Присоединенное свойство может быть реализовано как объект зависимости. Метод DependencyProperty.RegisterAttached () регистрирует присоединенное свойство.

Расширения разметки

При установке значений элементов вы можете делать это непосредственно, но иногда в этом очень пригодятся расширения разметки. Расширения разметки (markup extensions) состоят из фигурных скобок, внутри которых следует строковая лексема, определяющая тип расширения.



Ниже приведен пример расширения разметки StaticResource. <Button Name= button1 Style= {StaticResource key} Content= Click Me />

Вместо использования расширения разметки вы можете написать то же самое через дочерние элементы:

<Button Name= button1 >

<Button.Style>

<StaticResource ResourceKey= key />

</Button.Style> Click Me! </Button>

Расширения разметки в основном используются для обращения к ресурсам, необходимым для связывания данных. Обе эти темы мы обсудим ниже в настоящей главе.

Кооперация дизайнеров и разработчиков

Очень часто разработчики не только реализуют приложения Windows, но также отвечают и за дизайн. Это особенно верно в тех случаях, когда приложение создается только для внутреннего пользования. Если нанимается некто, обладающий квалификацией, необходимой для построения пользовательского интерфейса, то разработчик обычно получает файл JPEG, на котором представлено видение дизайнера того, как должен выглядеть пользовательский интерфейс.

Перед разработчиком затем встает проблема - воплотить этот дизайнерский план. Даже минимальные изменения, вносимые дизайнером, такие как другой внешний вид окон списков или кнопок, может привести к необходимости значительных затрат при использовании собственных рисуемых элементов управления. В результате пользовательский интерфейс, реализованный разработчиком, сильно отличается от того, который был изначально спроектирован.

Благодаря WPF эта ситуация меняется. Дизайнер и разработчик могут работать с одним и тем же кодом XAML. Дизайнер может использовать такой инструмент, как Expression Blend, в то время как разработчик - Visual Studio 2008. Оба работают над одними и теми же файлами проекта. В типичной схеме такого процесса кооперации дизайнер начинает проект в Expression Blend, используя те же файлы проекта, что и Visual Studio. Затем разработчик вступает в работу над отделенным кодом, в то время, пока дизайнер совершенствует пользовательский интерфейс. По мере того, как разработчик расширяет функциональность, дизайнер также может добавлять новые интерфейсные средства, использующие эту дополнительную функциональность, предоставленную разработчиком. Конечно, можно также запустить разработку приложения в Visual Studio и позднее усовершенствовать пользовательский интерфейс в EID. Единственное, о чем вам следует позаботиться - не разрабатывать интерфейс так, как вы привыкли делать это в Windows Forms, поскольку при этом не будут в полной мере использованы преимущества, представленные WPF.

На рис. 34.3 показано окно в Expression Blend, созданное с применением WPF. В этом приложении возможно масштабирование как рабочего пространства, так и документа, поскольку WPF базируется на векторной графике.

По сравнению с расширениями Expression Blend к Visual Studio, Expression Blend обладает великолепными средствами для определения стилей, создания анимаций, использования графики и т.п. Чтобы работать совместно, Expression Blend может использовать классы отделенного кода, созданные разработчиком, и дизайнер может специфицировать привязку данных от элементов WPF к классам .NET. Дизайнер может также протестировать завершенное приложение, начав с Expression Blend. Поскольку Expression Blend использует те же файлы MS-Build, что и Visual Studio, отделенного код C# компилируется для запуска приложения.



1 [ 2 ] 3 4 5 ... 15

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика