Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
03.11.13 / Практика / New / Элементы управления.docx
Скачиваний:
44
Добавлен:
08.06.2015
Размер:
38.7 Кб
Скачать

Изменение значения свойства элемента управления

Многие элементы управления обладают свойствами, которые позволяют изменять внешний вид элемента управления, например BackgroundButton. Можно задать свойства значения в коде и в XAML. В следующем примере свойства Background, FontSize, и FontWeight на Button устанавливаются в XAML.

XAML

Копировать

<Button FontSize="14" FontWeight="Bold">

<!--Set the Background property of the Button to

a LinearGradientBrush.-->

<Button.Background>

<LinearGradientBrush StartPoint="0,0.5"

EndPoint="1,0.5">

<GradientStop Color="Green" Offset="0.0" />

<GradientStop Color="White" Offset="0.9" />

</LinearGradientBrush>

</Button.Background>

View message

</Button>

В следующем примере те же свойства задаются в коде.

C#

VB

Копировать

LinearGradientBrush buttonBrush = new LinearGradientBrush();

buttonBrush.StartPoint = new Point(0, 0.5);

buttonBrush.EndPoint = new Point(1, 0.5);

buttonBrush.GradientStops.Add(new GradientStop(Colors.Green, 0));

buttonBrush.GradientStops.Add(new GradientStop(Colors.White, 0.9));

submit.Background = buttonBrush;

submit.FontSize = 14;

submit.FontWeight = FontWeights.Bold;

Создание стиля для элемента управления

WPF предоставляет возможность задавать внешний вид для нескольких элементов управления вместо того, чтобы задавать свойства для каждого экземпляра в приложении. Это достигается путем создания Style. В следующем примере создается Style, который применяется к каждому Button в приложении. Определения Style обычно указываются в XAML в ResourceDictionary, например свойство Resources объекта FrameworkElement.

XAML

Копировать

<Style TargetType="Button">

<Setter Property="FontSize" Value="14"/>

<Setter Property="FontWeight" Value="Bold"/>

<Setter Property="Background">

<Setter.Value>

<LinearGradientBrush StartPoint="0,0.5"

EndPoint="1,0.5">

<GradientStop Color="Green" Offset="0.0" />

<GradientStop Color="White" Offset="0.9" />

</LinearGradientBrush>

</Setter.Value>

</Setter>

</Style>

Стиль можно также применить только к определенным элементам управления определенного типа путем присвоения ключа для стиля и задания этого ключа в свойстве элемента управления Style. За дополнительными сведениями о стилях обратитесь к разделу Стилизация и использование шаблонов.

Создание ControlTemplate

Style позволяет задать свойства для нескольких элементов управления одновременно. Однако в некоторых случаях может потребоваться изменить внешний вид Control сверх того, что достигается путем создания Style. Классы, которые наследуют от класса Control, имеют ControlTemplate, который определяет структуру и внешний вид Control. Свойство TemplateControl является открытым, поэтому пользователь может предоставить ControlControlTemplate, который отличен от задаваемого по умолчанию. Часто можно указать новый ControlTemplate для Control вместо наследования элемента управления для настройки внешнего вида Control.

Рассмотрим очень часто используемый элемент, Button. Основное поведение Button заключается в том, чтобы позволить приложению выполнить некоторое действие, когда пользователь щелкает этот элемент. По умолчанию Button в WPF отображается как приподнятый прямоугольник. При разработке приложения может понадобиться поведение Button (т.е. обработка события нажатия кнопки), однако при этом внешний вид кнопки может быть изменен так, что изменения свойств кнопки будет недостаточно. В этом случае можно создать новый ControlTemplate.

В следующем примере создается ControlTemplate для Button. ControlTemplate создает Button с округленными углами и градиентным фоном. ControlTemplate содержит Border, чей Background является LinearGradientBrush с двумя объектами GradientStop. Первый GradientStop использует привязку данных для привязки свойства ColorGradientStop к цвету фона кнопки. При установке свойства Background из Button цвет этого значения будет использоваться как первый GradientStop. Дополнительные сведения о привязке данных см. в разделе Общие сведения о связывании данных. В примере также создается Trigger, который изменяет внешний вид Button, когда IsPressed равно true.

XAML

Копировать

<!--Define a template that creates a gradient-colored button.-->

<Style TargetType="Button">

<Setter Property="Template">

<Setter.Value>

<ControlTemplate TargetType="Button">

<Border

x:Name="Border"

CornerRadius="20"

BorderThickness="1"

BorderBrush="Black">

<Border.Background>

<LinearGradientBrush StartPoint="0,0.5"

EndPoint="1,0.5">

<GradientStop Color="{Binding Background.Color,

RelativeSource={RelativeSource TemplatedParent}}"

Offset="0.0" />

<GradientStop Color="White" Offset="0.9" />

</LinearGradientBrush>

</Border.Background>

<ContentPresenter

Margin="2"

HorizontalAlignment="Center"

VerticalAlignment="Center"

RecognizesAccessKey="True"/>

</Border>

<ControlTemplate.Triggers>

<!--Change the appearance of

the button when the user clicks it.-->

<Trigger Property="IsPressed" Value="true">

<Setter TargetName="Border" Property="Background">

<Setter.Value>

<LinearGradientBrush StartPoint="0,0.5"

EndPoint="1,0.5">

<GradientStop Color="{Binding Background.Color,

RelativeSource={RelativeSource TemplatedParent}}"

Offset="0.0" />

<GradientStop Color="DarkSlateGray" Offset="0.9" />

</LinearGradientBrush>

</Setter.Value>

</Setter>

</Trigger>

</ControlTemplate.Triggers>

</ControlTemplate>

</Setter.Value>

</Setter>

</Style>

...

<Button Grid.Row="2" Grid.ColumnSpan="2" Name="submitName"

Background="Green">View message</Button>

Примечание

Для правильной работы примера свойству Background из Button должно быть присвоено SolidColorBrush.

Подписка на события

Подписаться на событие элемента управления можно с помощью XAML или кода, но обрабатывать событие возможно только в коде. В следующем примере показано, как подписаться на событие Click из Button.

XAML

Копировать

<Button Grid.Row="2" Grid.ColumnSpan="2" Name="submitName" Click="submit_Click"

Background="Green">View message</Button>

VB

Копировать

AddHandler submit.Click, AddressOf submit_Click

C#

Копировать

submit.Click += new RoutedEventHandler(submit_Click);

В следующем примере обрабатывается событие Click из Button.

C#

VB

Копировать

void submit_Click(object sender, RoutedEventArgs e)

{

MessageBox.Show("Hello, " + firstName.Text + " " + lastName.Text);

}

Расширенное содержимое в элементах управления

Большинство классов, которые наследуются от класса Control, имеют возможность хранения расширенного содержимого. Например, Label может содержать любой объект, такой как строка, Image, или Panel. Следующие классы обеспечивают поддержку для расширенного содержимого и служат базовым классами для большинства элементов управления в WPF.

Соседние файлы в папке New