WPF的各类内容模型

开发工具与关键技术: 内容模型的UI元素

作者:邓崇富

撰写时间:2019 年6 月 14 日

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在WPF中,我们把符合某类内容模型的UI元素称为一个族,每个族用它们共同基类来命名。

1、ContentControl族元素特点如下:

  1. 均派生自ContentControl类。
  2. 它们都是控件(Control)。
  3. 内容属性的名称为Content。
  4. 只能由单一元素充当其内容。

ContentControl族包含的控件如下表:

Button

ButtonBase

CheckBox

ComboBoxItem

ContentControl

Frame

GridViewColumnHeader

GroupItem

Label

ListBoxItem

GridViewItem

NavigationWindow

RadioButton

RepeatButton

ScrollViewer

StatusBarItem

ToggleButton

ToolTip

UserControl

Window

  1. HeaderedContentControl族元素特点如下:
  1. 它们都派生自HeaderedContentControl类,HeaderedContentControl是ContentControl类的派生类。
  2. 它们都是控件,用于显示带标题的数据。
  3. 除了用于显示主体内容的区域外,控件还具有一个显示标题(Header)的区域。
  4. 内容属性为Content和Header。
  5. 无论是Content还是Header都只能容纳一个元素作为其内容。

HeaderedContentControl族包含的控件如下表:

Expander

GroupBox

HeaderedContentControl

TabItem

下面这个例子是一个一图标为Header、以文字为主体内容的GroupBox。

XAML代码如下:

<Grid>

        <GroupBox Margin="10" BorderBrush="Gray">

            <GroupBox.Header>

                <Image Source="/Pitrues/Images/Q.PNG" Width="20" Height="20"/>

            </GroupBox.Header>

            <TextBlock TextWrapping="WrapWithOverflow" Margin="10,10,10,215" Text="突入一夜春风来,千树万树梨花开!"/>

        </GroupBox>

 </Grid>

效果如下图:

  1. ItemsControl族元素的特点如下:
    1. 均派生自ItemsControl类。
    2. 它们都是控件,用于显示列表化的数据。
    3. 内容属性为Items或ItemsSource。
    4. 每种ItemsControl都对应有自己的条目容器(Item Container)。

ItemsControl族的包含控件如下表:

Menu

MenuBase

ContextMenu

ComboBox

ItemsControl

ListBox

ListView

TabControl

TreeView

Selector

StatusBar

 

ListBox是个典型的ItemsControl,下面将以它为例。

首先,我们看下ListBox的自动包装。WPF的ListBox在显示功能上比Windows Form或者ASP.NET的ListBox要强大很多。传统的ListBox只能将条目以字符串的形式显示,而WPF的ListBox除了可以显示中规中矩的字符串条目还能够显示更多的元素,如CheckBox、RadioButton、TextBox等。

例如下面的XAML代码:

<Grid>

        <ListBox Margin="5">

            <CheckBox x:Name="复选框1" Content="复选框1"/>

            <CheckBox x:Name="复选框2" Content="复选框2"/>

            <CheckBox x:Name="复选框3" Content="复选框3"/>

            <Button x:Name="按钮1" Content="按钮1"/>

            <Button x:Name="按钮2" Content="按钮2"/>

            <Button x:Name="按钮3" Content="按钮3"/>

        </ListBox>

</Grid>

效果如下图:

表面看上去是ListBox直接包含一些CheckBox和Button,实际上并非这样,我们在按钮3里加上一个Click事件的响应,就可以看到它的父级容器了。

XAML按钮代码:<Button x:Name="按钮3" Content="按钮3" Click="按钮3_Click"/>

XAML后台代码:

//按钮3事件

        private void 按钮3_Click(object sender, RoutedEventArgs e)

        {

            Button btn = sender as Button;

            DependencyObject level1 = VisualTreeHelper.GetParent(btn);

            DependencyObject level2 = VisualTreeHelper.GetParent(level1);

            DependencyObject level3 = VisualTreeHelper.GetParent(level2);

            MessageBox.Show(level3.GetType().ToString());

}

点击后效果如下:

  1. HeaderedItemsControl族控件除了具有ItemsControl的特性外,还具有显示标题的能力,特点如下:
    1. 均派生自HeaderedItemsControl类。
    2. 它们都是控件,用于显示列表化的数据,同时可以显示一个标题。
    3. 内容属性为Itms、ItemsSource和Header。

本族控件只有3个:MenuItem、TreeViewItem、ToolBar。

  1. Decorator族:

本族中的元素是在UI上起到装饰效果的。如可以使用Border元素为一些组织的内容加个边框。如果需要组织在一起的内容能够自由缩放,则可以使用ViewBox元素。

本族元素的特点如下:

  1. 均派生自Decorator类。
  2. 起UI装饰作用。
  3. 内容属性为Child。
  4. 只能由单一元素充当内容。

 本族元素如下表:

ButtonChrome

ClasssicBorderDecorator

ListBoxChrome

SystemDropShadowChrome

Border

InkPresenter

BulletDecorator

Viewbox

AdornerDecorator

 

 

 

TextBlock和TextBox:

 这两个控件最主要的功能是显示文本。TextBlock只能显示文本,不能编辑,所以又称静态文本。TextBox则允许用户编辑其中的内容。TextBlock虽然不能编辑内容,但是可以使用丰富的印刷级的格式控件标记显示专业的排版效果。

   TextBlox不需要太多的格式显示,所以它的内容是简单的字符串,内容属性为Text.

   TextBlock由于需要操纵格式,所以内容属性是Inlines(印刷中的“行”),同时,TextBlock也保留一个名为Text的属性,当简单地显示一个字符串时,可以使用这个属性。

  1. Shape族元素:

友好的用户界面离不开各种图形的搭配,Shape族元素(它们只能是简单的视觉元素,不是控件)就是专门用来在UI上绘制图形的一类元素。这个类元素没有自己的内容,我们可以使用Fill属性为它们设置填充效果,还可以使用Stroke属性为它们设置边线的效果。

本族元素的特点如下:

  1. 均派生自Shape类。
  2. 用于2D图形绘制。、
  3. 无内容。
  4. 使用Fill属性设置填充,使用Stroke属性设置边线。
  1. Panel族元素特点如下:
    1. 均派生自Panel抽象类。
    2. 主要功能是控制UI布局。
    3. 内容属性为Children.
    4. 内容可以是多个元素,Panel元素将控制它们的布局。

对比ItemsControl和Panel元素,虽然内容都可以是多个元素,但ItemsControl强调以列表的形式来展现数据而Panel则强调对包含的元素进行布局,所以ItemsControl的内容属性是Items和ItemsSource而Panel的内容属性名为Children。

  本族元素如下表:

Canvas

DockPanel

Grid

TabPanel

ToolBarOverflowPanel

StackPanel

ToolBarPanel

UnifornGrid

VirtualizingPanel

VirtualizingStackPanel

WraPanel

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值