WPF Window Resources Resources Linear Gradient Brush x
Ресурсы в WPF <Window. Resources> Resources <Linear. Gradient. Brush x: Key="lg. Brush" Start. Point="0, 0" x: Key End. Point="1, 1"> <Gradient. Stop Color="Blue" Offset="0"/> <Gradient. Stop Color="Green" Offset="0. 5"/> <Gradient. Stop Color="Red" Offset="1"/> </Linear. Gradient. Brush> </Window. Resources> Resources x: Key – Задает имя ресурса, на который должны ссылаться желающие использовать этот ресурс. x: Key – должен быть уникален в той коллекции ресурсов, где определен, а не во всем документе Использование: <Button Background="{Static. Resource lg. Brush}“>Hello</Button> <Button Background="{Dynamic. Resource lg. Brush}“>Hello</Button> Static. Resource – ресурс определяется (ищется) только один раз Dynamic. Resource – ресурс определяется каждый раз, когда это необходимо (больше накладных расходов)
Словари ресурсов Ресурсы могут хранятся в отдельном файле, словаре. XAML Могут использоваться в любом месте приложения Словарь (XAML файл): <Resource. Dictionary> Resource. Dictionary xmlns="http: //schemas. microsoft. com/winfx/2006/xaml/presentation" xmlns: x="http: //schemas. microsoft. com/winfx/2006/xaml"> <Linear. Gradient. Brush x: Key="lg. Brush 1" Start. Point="0, 0" End. Point="1, 1"> x: Key <Gradient. Stop Color="Blue" Offset="0"/> <Gradient. Stop Color="Green" Offset="0. 5"/> </Linear. Gradient. Brush> <Linear. Gradient. Brush x: Key="lg. Brush 2" Start. Point="1, 1" End. Point="0, 0"> x: Key <Gradient. Stop Color="Light. Sky. Blue" Offset="0"/> <Gradient. Stop Color="Light. Coral" Offset="1"/> </Linear. Gradient. Brush> </Resource. Dictionary> Resource. Dictionary
Использование словарей Подключение словарей <Window. Resources> Resources <Resource. Dictionary> Resource. Dictionary <Resource. Dictionary. Merged. Dictionaries> Merged. Dictionaries <Resource. Dictionary Source="My. Dictionary. xaml"/> Source </Resource. Dictionary. Merged. Dictionaries> Merged. Dictionaries <Image. Brush x: Key="im. Brush" Image. Source="Chrysanthemum. jpg"/> </Resource. Dictionary> Resource. Dictionary </Window. Resources> Resources Использование ресурсов <Grid Background="{Static. Resource lg. Brush}" > <Button Foreground="{Static. Resource im. Brush}" Background="{Static. Resource revlg. Brush}/> </Grid>
Расширение разметки � � Позволяет получить значение в зависимости от переданных параметров Определение • Создать класс наследник от Markup. Extension • Переопределить метод Provide. Value • Пометить класс атрибутом [Markup. Extension. Return. Type()] с указанием возвращаемого типа [Markup. Extension. Return. Type(typeof(string))] Markup. Extension. Return. Type class My. Extension : Markup. Extension { public int My. Property { get; set; } public override object Provide. Value(IService. Provider service. Provider) Provide. Value { return (My. Property + 3). To. String(); } } � Использование (по соглашению Extension можно опустить) <Text. Block Text="{local: My My. Property=5}" /> <Button> <local: My My. Property="5"/> </Button>
Демонстрация Markup. Extension
Создание стиля Стили, обычно создаются в ресурсах <Window. Resources> <Style x: Key="My. Button. Style" Target. Type="Button"> x: Key Target. Type <Setter Property="Height" Value="40"/> Property Value <Setter Property="Margin" Value="3, 0, 0, 5"/> Property Value <Setter Property="Background" Value="Light. Blue"/> Property Value </Style> Style </Window. Resources> Использование: <Button Style="{Static. Resource My. Button. Style}/> Style Могут создаваться и напрямую в элементе: <Button. Style> <Setter Property="Margin" Value="3"/> </Style> </Button. Style>
Триггеры � � � Внесение простых изменений в зависимости от различных событий Декларативно Добавляются в коллекцию Style. Triggers <Style> <Setter …. . > <Style. Triggers> <Trigger Property="Button. Is. Focused" Value="true"> <Setter Property="Height" Value="60"/> </Trigger> </Style. Triggers> </Style>
Multi. Trigger � � Аналогично Trigger, но отслеживается несколько свойств одновременно. Отслеживаемые свойств задаются в коллекции Multi. Trigger. Conditions объектами Condition <Style. Triggers> <Multi. Trigger. Conditions> <Condition Property="Is. Focused" Value="True"/> <Condition Property="Is. Mouse. Over" Value="True"/> </Multi. Trigger. Conditions> <Multi. Trigger. Setters> <Setter Property="Width" Value="60"/> </Multi. Trigger. Setters> </Multi. Trigger> </Style. Triggers>
Триггеры данных � Data. Trigger и Multi. Data. Trigger � Такие же как и Trigger и Multi. Trigger, но отслеживают связанные данные. Вместо свойства Property имеется свойство Binding � <Data. Trigger Binding="{Binding Customer. Name}“ Value="Иван"> <Setter Property="Background" Value="Green"/> </Data. Trigger>
Анимация элемента � Анимация может быть добавлена непосредственно в коллекцию Triggers элемента управления <Button> <Button. Triggers> <Event. Trigger Routed. Event="Button. Mouse. Enter" Source. Name="button 1"> <Event. Trigger. Actions <Begin. Storyboard> <Double. Animation Storyboard. Target. Name="button 1" Storyboard. Target. Property="Width" From="60" To="80" Duration="0: 0: 0. 2"/> </Storyboard> </Begin. Storyboard> </Event. Trigger. Actions> </Event. Trigger> </Button. Triggers> </Button>
- Slides: 36