Главная » WPF » Будем стильными

0

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

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

<Window … >

<Window.Resources>

<SolidColorBrush x:Key=’bg’ Color=’Red’ />

<Style x:Key=’{x:Type Button}’ TargetType=’{x:Type Button}’>

<Setter Property=’Background’ Value=’{StaticResource bg}’ />

</Style>

</Window.Resources>

<!— … прочие аспекты окна … —>

<WrapPanel x:Name=’panel’ DockPanel.Dock=’Top’>

<Button Click=’HowdyClicked’>Howdy!</Button>

<Button>A second button</Button>

<TextBox x:Name=’_text1’>An editable text box</TextBox>

<CheckBox Content=’{Binding ElementName=_text1,Path=Text}’ />

<Slider Width=’75’ Minimum=’0’ Maximum=’100’ Value=’50’ />

</WrapPanel>

<!— … прочие аспекты окна … —>

</Window>

Результат работы этой программы  точно такой же, как показано  на рис. 1.22. Интереса ради попробуем изменить свойство Template кнопки. Большинство элементов  управления в WPF поддерживают шаблоны,  позволяющие  деклара# тивно изменять способ рисования элемента. В данном случае мы заменим станда# ртный вид кнопки эллипсом.

Класс ContentPresenter сообщает шаблону, где размещать  содержимое  кноп# ки. Здесь для отображения одной#единственной кнопки мы применяем менеджер размещения, разные элементы  управления и двумерную графику:

<Style x:Key=’{x:Type Button}’ TargetType=’{x:Type Button}’>

<Setter Property=’Background’ Value=’{StaticResource bg}’ />

<Setter Property=’Template’>

<Setter.Value>

<ControlTemplate TargetType=’{x:Type Button}’>

<Grid>

<Ellipse StrokeThickness=’4’>

<Ellipse.Stroke>

<LinearGradientBrush>

<GradientStop Offset=’0’ Color=’White’ />

<GradientStop Offset=’1’ Color=’Black’ />

</LinearGradientBrush>

</Ellipse.Stroke>

<Ellipse.Fill>

<LinearGradientBrush>

<GradientStop Offset=’0’ Color=’Silver’ />

<GradientStop Offset=’1’ Color=’White’ />

</LinearGradientBrush>

</Ellipse.Fill>

</Ellipse>

<ContentPresenter Margin=’10’ HorizontalAlignment=’Center’ VerticalAlignment=’Center’ />

</Grid>

</ControlTemplate>

</Setter.Value>

</Setter>

</Style>

На рис. 1.23 показано, что получается  при запуске этой программы. Кнопки ос# таются активными; при нажатии  кнопки  Howdy! по#прежнему обновляется текс# товое поле (напомним, что код, реализующий такое поведение, был написан выше).

Мы упомянули большую часть возможностей WPF,  но пока лишь очень пове# рхностно. Перед тем как завершить  введение, поговорим о том, как сконфигури# ровать компьютер  для сборки и запуска тех чудесных программ, которые мы со# бираемся написать.

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

  • Комментарии