'

Классы Windows Presentation Foundation

Понравилась презентация – покажи это...





Слайд 0

Классы Windows Presentation Foundation


Слайд 1

Стиль (Style) Стили – механизм применения некоторого набора свойств к одному или нескольким элементам управления. Стиль описывается с помощью объекта класса Style, который поддерживает коллекцию объектов Setter, каждый из которых определяет пару свойство (Property) – значение(Value). Можно установить стиль для любого объекта, производного от класса FrameworkElement или FrameworkContentElement, присвоив значение свойству Style этих классов. Стиль можно определить в разметке и в коде. Обычно стиль определяется как ресурс в разметке. Если несколько объектов Setter определено для одного свойства, используется значение, указанное последним. Значение свойства, присвоенное явно, переопределяет значение из стиля. Стили WPF поддерживают триггеры – объекты, инициирующие изменение значений при выполнении некоторых условий, например, когда свойство получает значение true или происходит некоторое событие. public Style Style { get; set; }


Слайд 2

Классы Setter и EventSetter SetterBase - абстрактный базовый класс с единственным свойством public bool IsSealed { get; }, которое имеет значение true, если объект находится в неизменяемом состоянии. Класс Setter определяет пару свойство-значение (Property/Value). Пару свойство-значение можно задать в конструкторах класса Setter или с помощью свойств, определенных в классе Setter. Класс EventSetter имеет конструкторы и свойства, с помощью которых в стиле можно определить пару событие-обработчик. public Setter(); public Setter( DependencyProperty property, Object value ); public Setter( DependencyProperty property, Object value, string targetName ); public Object Value { get; set; } public DependencyProperty Property { get; set; } public string TargetName { get; set; } public EventSetter(); public EventSetter( RoutedEvent routedEvent, Delegate handler ); public RoutedEvent Event { get; set; } public Delegate Handler { get; set; } public bool HandledEventsToo { get; set; }


Слайд 3

Класс Style Класс поддерживает две коллекции – коллекцию объектов Setter / EventSetter и коллекцию объектов Trigger. В классе Style определены конструкторы, параметры которых определяют целевой тип (тип, к которому применяется стиль) и базовый стиль (стиль, на основе которого создается новый стиль). public Style(); public Style( Type targetType ); public Style( Type targetType, Style basedOn ); Базовый стиль и целевой тип можно определить как в конструкторах, так и с помощью свойств. public SetterBaseCollection Setters { get; } public TriggerCollection Triggers { get; } public Style BasedOn { get; set; } public Type TargetType { get; set; } Если новый стиль определяется на основе базового стиля, то целевой тип TargetType для нового стиля должен либо совпадать с целевым типом для базового стиля, либо быть производным от него.


Слайд 4

Стиль. Пример В примере в разметке определен стиль как ресурс с ключом Style_1. <Window.Resources> <LinearGradientBrush x:Key="G_Brush" StartPoint="0,0" EndPoint="1,0"> <GradientStop Color="LightBlue" Offset="0.0" /> <GradientStop Color="SlateBlue" Offset="1.0" /> </LinearGradientBrush> <Style x:Key="Style_1"> <Setter Property="Control.FontFamily" Value="Times New Roman" /> <Setter Property="Control.FontStyle" Value="Italic" /> <Setter Property="Control.Background" Value="AliceBlue"/> <Setter Property="Control.Foreground" Value="{StaticResource G_Brush}" /> </Style> </Window.Resources> Этот стиль применен к элементам Button button3 и ListBox listBox1. <Button Style="{StaticResource Style_1}" Height="25" Margin="10” Name="button3"> Test </Button> <ListBox Style="{StaticResource Style_1}" Height="100" Margin="10“ Name="listBox1“> <ListBoxItem>Item_1</ListBoxItem> <ListBoxItem>Item_2</ListBoxItem> </ListBox>


Слайд 5

Целевой тип для стиля Свойство TargetType класса Style определяет тип, к которому применяется данный стиль. <Style TargetType="{x:Type TextBlock}"> <Setter Property="Background" Value="DarkBlue"/> <Setter Property="Foreground" Value="White" /> </Style> <Style TargetType="{x:Type TextBlock}" x:Key="Style_Green"> <Setter Property="Background" Value="LightGreen"/> <Setter Property="Foreground" Value="White" /> </Style> <Style x:Key="Style_Red"> <Setter Property="Control.Background" Value="Red"/> <Setter Property="Control.Foreground" Value="White" /> </Style> В примере первый стиль определен с указанием целевого типа, но без ключа. Ему неявно будет присвоен “стандартный” ключ {x:Type TextBlock} и стиль автоматически будет применен ко всем элементам TextBlock. Второй стиль имеет и целевой тип, и ключ ("Style_Green”). Этот стиль будет применен только к тем элементам TextBlock, где он будет указан явно как значение свойства Style. Третий стиль определен без целевого типа, поэтому в элементах Setter для свойств необходимо указать имя класса (в примере это класс Control). Этот стиль можно применить к любым элементам, производным от класса Control, при этом необходимо явно присвоить его как значение свойству Style. Свойство TargetType класса Style определяет тип, к которому применяется данный стиль.


Слайд 6

Наследование стиля В примере стиль “Style_On_Red” наследует значения свойств, определенных в стиле “Style_Red”, и добавляет значение Brushes.Blue для свойства Control.BorderBrush. public Style BasedOn { get; set; } <Style x:Key="Style_On_Red" BasedOn="{StaticResource Style_Red}"> <Setter Property="Control.BorderBrush" Value="Blue"/> </Style> Свойство BasedOn класса Style определяет базовый стиль. Стиль наследует все значения своего базового стиля, которые явно не переопределяются.


Слайд 7

Триггеры Триггеры – объекты, инициирующие изменение значений при выполнении некоторых условий, например, когда свойство получает значение true или происходит некоторое событие. Модель стилей и шаблонов WPF использует триггеры в классах Style, ControlTemplate и DataTemplate. Триггеры дают возможность автоматически изменять значения свойств элемента в зависимости от действий пользователя, например, когда пользователь перемещает курсор в область элемента управления UIElement, его свойство IsMouseOver получает значение true, и триггер может переключить значение свойства. Свойства, которые изменяются с помощью триггеров, автоматически восстанавливают свои значения, когда прекращается выполнение условий переключения. MultiTrigger дают возможность переключать значения, основанные на выполнении нескольких условий. EventTrigger позволяют включать изменения, связанные с событием.


Слайд 8

Класс Trigger Класс дает возможность автоматически переключать значения свойств зависимостей при выполнении определенного условия. Свойства класса


Слайд 9

Триггеры. Пример В примере определен стиль "Style_2” с двумя триггерами, один из которых имеет тип Trigger, другой – MultiTrigger. <Style x:Key="Style_2"> <Setter Property="Control.FontStyle" Value="Italic" /> <Setter Property="Control.Background" Value="AliceBlue"/> <Style.Triggers> <Trigger Property="Control.IsMouseOver" Value="True"> <Setter Property="Control.Background" Value="LightGreen"/> <Setter Property="Control.Cursor" Value="Hand"></Setter> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="Control.IsFocused" Value="true" /> <Condition Property="Control.IsMouseOver" Value="true" /> </MultiTrigger.Conditions> <Setter Property="Control.Cursor" Value="ArrowCD"/> <Setter Property="Control.Background" Value="Green”/> <Setter Property="Control.Foreground" Value="LightGreen"/> </MultiTrigger> </Style.Triggers> </Style> Первый триггер изменяет значения свойств Background и Cursor по условию, которое определяется значением true свойства IsMouseOver элемента Control (курсор мыши находится в элементе управления). MultiTrigger изменяет значения свойств Foreground, Background и Cursor. Условие переключения определяется двумя свойствами элемента Control – IsFocused и IsMouseOver. Оба эти свойства одновременно должны иметь значение true, т.е. элемент управления имеет фокус ввода и курсор мыши находится в элементе управления.


Слайд 10

Шаблоны (Templates) WPF поддерживает три типа шаблонов – шаблоны элементов управления, шаблоны данных и шаблоны для ItemsControl. Класс DataTemplate дает возможность задать визуальное представление для объекта с данными. Шаблоны данных DataTemplate значительно упрощают привязку данных к элементам управления, производных от ItemsControl. Шаблон ControlTemplate определяет внешний вид объекта Control. Каждый объект Control имеет шаблон ControlTemplate по умолчанию, который приложение может переопределить.


Слайд 11

Шаблон DataTemplate. Пример В примере определен шаблон DataTemplate для элементов списка ListBox. Источником данных для ListBox является коллекция . В типе элементов коллекции есть открытые свойства FirstName, SecondName и Date. <ListBox Margin="10" Name="listBox2" Grid.Column="2" > <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Path=FirstName}" /> <TextBlock Text="{Binding Path=SecondName}"/> <TextBlock Text="{Binding Path=Date}"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>


×

HTML:





Ссылка: