Текстовые поля ограничены в видах содержимого.
3.2.2 Простые элементы управления с содержимым являются наследниками класса ContentControl, содержат в своём составе свойство Content, через которое можно добавить к элементу любое содержимое.
Например, класс Button унаследован от ContentControl, так что и к нему разрешено добавлять любое содержимое. Ниже приводятся примеры XAML-описания кнопок с различным содержанием, размещённых в контейнере <Grid>:
<!-- Кнопка с геометрической фигурой -->
<Button Content="Кнопка с геометрической фигурой" Grid. Column="0" Grid. Row="0" Grid. ColumnSpan="3" FontSize="26" Margin="10" Padding="20">
<Button. Background>
<DrawingBrush>
<DrawingBrush. Drawing>
<GeometryDrawing Brush="Red">
<GeometryDrawing. Pen>
<Pen>
<Pen. Brush>
<SolidColorBrush>Blue</SolidColorBrush>
</Pen. Brush>
</Pen>
</GeometryDrawing. Pen>
<GeometryDrawing. Geometry>
<PathGeometry>
<PathGeometry. Figures>
<PathFigure StartPoint="100,0">
<PathFigure. Segments>
<BezierSegment Point1="100,50" Point2="150,50" Point3="150,50" />
<LineSegment Point="120,110" />
<BezierSegment Point1="100,100" Point2="50,50" Point3="50,100" />
<LineSegment Point="100,50" />
</PathFigure. Segments>
</PathFigure>
</PathGeometry. Figures>
</PathGeometry>
</GeometryDrawing. Geometry>
</GeometryDrawing>
</DrawingBrush. Drawing>
</DrawingBrush>
</Button. Background>
</Button>
<!-- Кнопка с фоном типа Градиент -->
<Button Grid. Column="1" Grid. Row="1" Grid. ColumnSpan="2" Content="Кнопка с фоном типа Градиент" FontSize="20" Foreground="White">
<Button. Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Offset="0" Color="LightBlue" />
<GradientStop Offset="0.4" Color="Blue" />
<GradientStop Offset="1" Color="DarkBlue" />
</LinearGradientBrush>
</Button. Background>
</Button>
<!-- Кнопка с медиа -->
<Button Content="Кнопка с медиа" Grid. Column="0" Grid. Row="2" Foreground="White">
<Button. Background>
<VisualBrush>
<VisualBrush. Visual>
<MediaElement Source="d:\MainBackground. wmv" />
</VisualBrush. Visual>
</VisualBrush>
</Button. Background>
</Button>
<!-- Кнопка со страницей -->
<Button Grid. Column="2" Grid. Row="2" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" >
<Frame Source="Page1.xaml" Background="White" NavigationUIVisibility="Hidden" />
</Button>
Для последнего примера необходимо включить в состав проекта страницу и заменить код листинга Page1.xaml на описание, заимствованное из открытой коллекции ©Microsoft.
Листинг Page1.xaml
<!--
// Copyright © Microsoft Corporation. All Rights Reserved.
// This code released under the terms of the
// Microsoft Public License (MS-PL, http://opensource. org/licenses/ms-pl. html.) -->
<!-- TextAnimationExample. xaml
Applies an animated rotate transform to
individual characters.-->
<Page xmlns="http://schemas. /winfx/2006/xaml/presentation"
xmlns:x="http://schemas. /winfx/2006/xaml"
x:Class="WpfApplication1.Page1">
<Page. Background>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<LinearGradientBrush. GradientStops>
<GradientStop Offset="0.0" Color="Black" />
<GradientStop Offset="1.0" Color="#666666" />
</LinearGradientBrush. GradientStops>
</LinearGradientBrush>
</Page. Background>
<StackPanel Margin="5">
<Border Name="TextBorder" HorizontalAlignment="Center"
VerticalAlignment="Center" >
<TextBlock
Name="RealText"
FontFamily="Segoe UI"
FontSize="40 px"
Margin="5"
Foreground="White">
Windows 7
<TextBlock. TextEffects>
<!-- The TextEffect to animate. -->
<TextEffect PositionCount="1" x:Name="MyTextEffect">
<TextEffect. Transform>
<RotateTransform x:Name="TextEffectRotateTransform"
Angle="0" CenterX="10" CenterY="10" />
</TextEffect. Transform>
</TextEffect>
</TextBlock. TextEffects>
<TextBlock. Triggers>
<EventTrigger RoutedEvent="TextBlock. Loaded">
<BeginStoryboard>
<Storyboard>
<ParallelTimeline RepeatBehavior="Forever">
<!-- Animates the angle of the RotateTransform
applied to the TextEffect. -->
<DoubleAnimation
Storyboard. TargetName="TextEffectRotateTransform"
Storyboard. TargetProperty="Angle"
From="0"
To="360"
Duration="00:00:0.75"
BeginTime="0:0:0.25" />
</ParallelTimeline>
<!-- Animates the horizontal center of the RotateTransform
applied to the TextEffect. -->
<DoubleAnimation
From="30"
To="370"
Duration="00:00:13"
RepeatBehavior="Forever"
AutoReverse="True"
Storyboard. TargetName="TextEffectRotateTransform"
Storyboard. TargetProperty="CenterX" />
<!-- Animates the position of the TextEffect. -->
<Int32AnimationUsingKeyFrames
Storyboard. TargetName="MyTextEffect"
Storyboard. TargetProperty="PositionStart"
Duration="0:0:13"
AutoReverse="True"
RepeatBehavior="Forever">
<Int32AnimationUsingKeyFrames. KeyFrames>
<DiscreteInt32KeyFrame Value="0" KeyTime="0:0:0" />
<DiscreteInt32KeyFrame Value="1" KeyTime="0:0:1" />
<DiscreteInt32KeyFrame Value="2" KeyTime="0:0:2" />
<DiscreteInt32KeyFrame Value="3" KeyTime="0:0:3" />
<DiscreteInt32KeyFrame Value="4" KeyTime="0:0:4" />
<DiscreteInt32KeyFrame Value="5" KeyTime="0:0:5" />
<DiscreteInt32KeyFrame Value="6" KeyTime="0:0:6" />
<DiscreteInt32KeyFrame Value="7" KeyTime="0:0:7" />
<DiscreteInt32KeyFrame Value="8" KeyTime="0:0:8" />
<DiscreteInt32KeyFrame Value="9" KeyTime="0:0:9" />
<DiscreteInt32KeyFrame Value="10" KeyTime="0:0:10" />
<DiscreteInt32KeyFrame Value="11" KeyTime="0:0:11" />
<DiscreteInt32KeyFrame Value="12" KeyTime="0:0:12" />
</Int32AnimationUsingKeyFrames. KeyFrames>
</Int32AnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</TextBlock. Triggers>
</TextBlock>
</Border>
<!-- Uses a VisualBrush to create a reflection of the animated text. -->
<Rectangle Name="ReflectedText"
Height="{Binding ElementName=TextBorder, Path=ActualHeight}"
Width="{Binding ElementName=TextBorder, Path=ActualWidth}"
HorizontalAlignment="Center">
<Rectangle. OpacityMask>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<LinearGradientBrush. GradientStops>
<GradientStop Offset="0.0" Color="#66000000" />
<GradientStop Offset="1.0" Color="#00000000" />
</LinearGradientBrush. GradientStops>
</LinearGradientBrush>
</Rectangle. OpacityMask>
<Rectangle. Fill>
<VisualBrush
Visual="{Binding ElementName=TextBorder}">
<VisualBrush. RelativeTransform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="-1" />
<TranslateTransform Y="1" />
</TransformGroup>
</VisualBrush. RelativeTransform>
</VisualBrush>
</Rectangle. Fill>
</Rectangle>
</StackPanel>
</Page>
Образ окна с кнопками на этапе выполнения иллюстрирует рисунок 3.5.

Рисунок 3.5
Наиболее часто используемые классы стандартных элементов управления содержимым описаны в таблице 3.3.
Таблица 3.3
Класс | Описание |
Button | Событие по умолчанию Click |
CheckBox | Для кнопки определены три состояния с помощью свойства IsChecked: true - "включена", false - "отключена" и null – состояние не определено. |
RadioButton | Для кнопки определены такие же три состояния для свойства IsChecked. Значение null – выбор должен быть подтверждён. |
Label | Представляет текстовую метку для элемента управления, поддерживает клавиатурные комбинации ускоренного доступа, например, для команд меню. |
Frame | Поддерживает навигацию по содержимому страницы с помощью метода Navigate(). Если содержимым является web-страница, то для его отображения применяется элемент управления типа web - браузера. |
ScrollViewer | Включает линейку прокрутки, которая отображается по мере необходимости. |
ToolTip | Создаёт всплывающее окно для отображения дополнительной информации о некотором элементе управления. |
UserControl | Использование в качестве базового класса предлагает простой способ создания специальных (пользовательских) элементов управления. Однако базовый класс UserControl не поддерживает шаблонов. |
Window | Позволяет создавать окна и диалоговые окна. С помощью класса Window получается фрейм с кнопками сворачивания/разворачивания/закрытия и системным меню. |
NavigationWindow | Унаследован от класса Window и поддерживает навигацию по содержимому. |
В следующем XAML описании внутри <Window> содержится только элемент управления <Frame>.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Основные порталы (построено редакторами)
