Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
03.11.13 / ! / Old / 1_Введение в WPF.doc
Скачиваний:
64
Добавлен:
08.06.2015
Размер:
2.2 Mб
Скачать

Модель содержимого

Главной задачей большей части элементов управления WPF является отображение содержимого. В WPF тип и количество элементов, которые могут составлять содержимое элемента управления, называется моделью содержимого элемента управления. Некоторые элементы управления могут содержать один элемент и один тип содержимого. Например, содержимое TextBox — строковое значение, которое присваивается свойству Text. В следующем примере задается содержимое элемента управления TextBox.

XAML

Копировать

<Window

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

x:Class="SDKSample.TextBoxContentWindow"

Title="TextBox Content">

...

<TextBox Text="This is the content of a TextBox." />

...

</Window>

На следующем рисунке показан результат.

Однако другие элементы управления, могут содержать несколько элементов с разными типами содержимого; например содержимое элемента управления Button, заданное в свойстве Content, может содержать разнообразные элементы, включая элементы управления макета, текст, изображения и фигуры. В следующем примере показан элемент управления Button с содержимым, которое включает элементы DockPanel, Label, Border и MediaElement.

XAML

Копировать

<Window

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

x:Class="SDKSample.ButtonContentWindow"

Title="Button Content">

...

<Button Margin="20">

<!-- Button Content -->

<DockPanel Width="200" Height="180">

<Label DockPanel.Dock="Top" HorizontalAlignment="Center">Click Me!</Label>

<Border Background="Black" BorderBrush="Yellow" BorderThickness="2"

CornerRadius="2" Margin="5">

<MediaElement Source="media/wpf.wmv" Stretch="Fill" />

</Border>

</DockPanel>

</Button>

...

</Window>

На следующем рисунке показано содержимое этой кнопки.

Дополнительные сведения о видах содержимого, которое поддерживается различными элементами управления, см. в разделе Модель содержимого WPF.

Триггеры

Хотя главной задачей разметки XAML и является реализация внешнего вида приложения, XAML также можно использовать для реализации некоторых действий, выполняемых приложением. Например, с помощью триггеров изменять внешний вид приложения в зависимости от действий пользователя. Дополнительные сведения см. раздел "Триггеры" в Стилизация и использование шаблонов.

Шаблоны элементов управления

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

Иногда внешний вид элемента управления по умолчанию может не сочетаться с общим внешним видом приложения. В этом случае можно с помощью ControlTemplate изменить внешний вид Пользовательский интерфейс элемента управления без изменения его содержимого и поведения.

В следующем примере показано изменение внешнего вида Button с помощью ControlTemplate.

XAML

Копировать

<Window

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

x:Class="SDKSample.ControlTemplateButtonWindow"

Title="Button with Control Template" Height="158" Width="290">

<!-- Button using an ellipse -->

<Button Content="Click Me!" Click="button_Click">

<Button.Template>

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

<Grid Margin="5">

<Ellipse Stroke="DarkBlue" StrokeThickness="2">

<Ellipse.Fill>

<RadialGradientBrush Center="0.3,0.2" RadiusX="0.5" RadiusY="0.5">

<GradientStop Color="Azure" Offset="0.1" />

<GradientStop Color="CornflowerBlue" Offset="1.1" />

</RadialGradientBrush>

</Ellipse.Fill>

</Ellipse>

<ContentPresenter Name="content" HorizontalAlignment="Center"

VerticalAlignment="Center"/>

</Grid>

</ControlTemplate>

</Button.Template>

</Button>

</Window>

VB

Копировать

Imports System.Windows ' Window, RoutedEventArgs, MessageBox

Namespace SDKSample

Public Class ControlTemplateButtonWindow

Inherits Window

Public Sub New()

InitializeComponent()

End Sub

Private Sub button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)

MessageBox.Show("Hello, Windows Presentation Foundation!")

End Sub

End Class

End Namespace

C#

Копировать

using System.Windows; // Window, RoutedEventArgs, MessageBox

namespace SDKSample

{

public partial class ControlTemplateButtonWindow : Window

{

public ControlTemplateButtonWindow()

{

InitializeComponent();

}

void button_Click(object sender, RoutedEventArgs e)

{

// Show message box when button is clicked

MessageBox.Show("Hello, Windows Presentation Foundation!");

}

}

}

В этом примере кнопка Пользовательский интерфейс, созданная по умолчанию, была заменена кнопкой Ellipse, которая имеет темно-синюю границу и закрашена с помощью RadialGradientBrush. В элементе управления ContentPresenter выводится содержимое объекта Button ("Click Me!"). Когда пользователь нажимает кнопку Button, событие Click по-прежнему вызывается в рамках стандартной реакции элемента управления Button. Результат показан на следующем рисунке.

Дополнительные сведения см. в разделе ControlTemplate. Ознакомительный пример см. в файле Styling with ControlTemplates Sample.