当前位置: 澳门新濠3559 > 操作系统 > 正文

GridView控件的属性,目标是能理解模板化控件常见

时间:2019-12-21 19:57来源:操作系统
CMFCPropertyGridCtrl::SetVSDotNetLook设置属性网格控件的外观用于VisualStudio2005的样式。voidSetVSDotNetLook(BOOLbSet=TRUE);参数[in]bSet设置属性网格控件的TRUE用于VisualStudio2005的样式;否则,FALSE。默认值

CMFCPropertyGridCtrl::SetVSDotNetLook设置属性网格控件的外观用于VisualStudio2005的样式。voidSetVSDotNetLook(BOOLbSet=TRUE);参数[in]bSet设置属性网格控件的TRUE用于VisualStudio2005的样式;否则,FALSE。默认值为TRUE。这是网上给的解释,我看起来不怎么理解,想请问一下设置......外观用于VisualStudio2005的样式。是什么意思?

1.1 ControlTemplate

UWP的控件有很多属性,使用这些属性可以为控件定制不同的外观,例如将Button的Border变粗,Background改为红色等,但通过这种改造控件,能做到的仍十分有限。

通过为控件赋予新的ControlTemplate,可以为控件创建全新的外观。在下面的例子中,通过ControlTemplate将Button改成一个圆形按钮。

<Button Content="Orginal" Margin="0,0,20,0"/>
<Button Content="Custom">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <Grid>
                <Ellipse  Stroke="DarkOrange" StrokeThickness="3" Fill="LightPink"/>
                <ContentPresenter Margin="10,20" Foreground="White"/>
            </Grid>
        </ControlTemplate>
    </Button.Template>
</Button>

澳门新濠3559 1

ControlTemplate的内容是定义控件可视结构的XAML。有时,这段XAML的根元素包含VisualStateManager.VisualStateGroups附加属性,用于定义不同状态下控件的外观变化。将ControlTemplate赋值到Control.Template即可改变控件的外观。ControlTemplate的TargetType需要和使用它的控件匹配。

注意:UserControl不能使用ControlTemplate。

被单击时发生。它们分别在网格控件处理分页操作之前和之后激发。RowCancelingEdit 在一个处于编辑模式的行的Cancel按钮被单击,但是在该行退出编辑模式之前发生。RowCommand单击一个按钮时发生。RowCreated创建一行时发生。 RowDataBound一个数据行绑定到数据时发生。RowDeleting, RowDeleted 这两个事件都是在一行的Delete按钮被单击时发生。它们分别在该网格控件删除该行之前和之后激发。RowEditing 当一行的Edit按钮被单击时,但是在该控件进入编辑模式之前发生。RowUpdating,RowUpdated 这两个事件都是在一行的Update按钮被单击时发生。它们分别在该网格控件更新该行之前和之后激发。SelectedIndexChanging, SelectedIndexChanged这两个事件都是在一行的Select按钮被单击时发生。它们分别在该网格控件处理选择操作之前和之后激发。 Sorting, Sorted这两个事件都是在对一个列进行排序的超链接被单击时发生。它们分别在网格控件处理排序操作之前和之后激发
GridView控件的列字段

2.3 使用MyFirstControl

<Page
    x:Class="App3.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App3"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <local:MyFirstControl />
    </Grid>
</Page>

通常情况下MainPage已经引用了local命名控件,所以只需这段xaml即可轻松使用刚刚创建好的控件。

  1. GridView控件的事件表10.11 GridView控件激发的事件事件描述PageIndexChanging,PageIndexChanged这两
    GridView控件的事件

2.1 MyFirstControl.cs

public sealed class MyFirstControl : Control
{
    public MyFirstControl()
    {
        this.DefaultStyleKey = typeof(MyFirstControl);
    }
}

类文件负责定义控件的结构和行为。MyFirstControl.cs的代码如图所示,只包含一个构造函数及一句 this.DefaultStyleKey = typeof(MyFirstControl)。DefaultStyleKey是用于查找控件样式的键,没有这句代码控件就找不到默认UI。

如果控件需要被继承的话,最好把sealed关键字移除。

表10.6 GridView控件的行为属性
属性
描述
AllowPaging
指示该控件是否支持分页。
AllowSorting
指示该控件是否支持排序。
AutoGenerateColumns
指示是否自动地为数据源中的每个字段创建列。默认为true。
AutoGenerateDeleteButton
指示该控件是否包含一个按钮列以允许用户删除映射到被单击行的记录。
AutoGenerateEditButton
指示该控件是否包含一个按钮列以允许用户编辑映射到被单击行的记录。
AutoGenerateSelectButton
指示该控件是否包含一个按钮列以允许用户选择映射到被单击行的记录。
DataMember
指示一个多成员数据源中的特定表绑定到该网格。该属性与DataSource结合使用。如果DataSource是有一个DataSet对象,则该属性包含要绑定的特定表的名称。
DataSource
获得或设置包含用来填充该控件的值的数据源对象。
DataSourceID
指示所绑定的数据源控件。
EnableSortingAndPagingCallbacks
指示是否使用脚本回调函数完成排序和分页。默认情况下禁用。
RowHeaderColumn
用作列标题的列名。该属性旨在改善可访问性。
SortDirection
获得列的当前排序方向。
SortExpression
获得当前排序表达式。
UseAccessibleHeader
规定是否为列标题生成<th>标签(而不是<td>标签)。
表10.7 GridView控件的样式属性
样式
描述
AlternatingRowStyle
定义表中每隔一行的样式属性。
EditRowStyle
定义正在编辑的行的样式属性。
FooterStyle
定义网格的页脚的样式属性。
HeaderStyle
定义网格的标题的样式属性。
EmptyDataRowStyle
定义空行的样式属性,这是在GridView绑定到空数据源时生成。
PagerStyle
定义网格的分页器的样式属性。
RowStyle
定义表中的行的样式属性。
SelectedRowStyle
定义当前所选行的样式属性。
表10.8 GridView控件的外观属性
属性
描述
BackImageUrl
指示要在控件背景中显示的图像的URL。
Caption
在该控件的标题中显示的文本。
CaptionAlign
标题文本的对齐方式。
CellPadding
指示一个单元的内容与边界之间的间隔(以像素为单位)。
CellSpacing
指示单元之间的间隔(以像素为单位)。
GridLines
指示该控件的网格线样式。
HorizontalAlign
指示该页面上的控件水平对齐。
EmptyDataText
指示当该控件绑定到一个空的数据源时生成的文本。
PagerSettings
引用一个允许我们设置分页器按钮的属性的对象。
ShowFooter
指示是否显示页脚行。
ShowHeader
指示是否显示标题行。
表10.10 状态属性
属性
描述
BottomPagerRow
返回表格该网格控件的底部分页器的GridViewRow对象。
Columns
获得一个表示该网格中的列的对象的集合。如果这些列是自动生成的,则该集合总是空的。
DataKeyNames
获得一个包含当前显示项的主键字段的名称的数组。
DataKeys
获得一个表示在DataKeyNames中为当前显示的记录设置的主键字段的值。
EditIndex
获得和设置基于0的索引,标识当前以编辑模式生成的行。
FooterRow
返回一个表示页脚的GridViewRow对象。
HeaderRow
返回一个表示标题的GridViewRow对象。
PageCount
获得显示数据源的记录所需的页面数。
PageIndex
获得或设置基于0的索引,标识当前显示的数据页。
PageSize
指示在一个页面上要显示的记录数。
Rows
获得一个表示该控件中当前显示的数据行的GridViewRow对象集合。
SelectedDataKey
返回当前选中的记录的DataKey对象。
SelectedIndex
获得和设置标识当前选中行的基于0的索引。
SelectedRow
返回一个表示当前选中行的GridViewRow对象。
SelectedValue
返回DataKey对象中存储的键的显式值。类似于SelectedDataKey。
TopPagerRow
返回一个表示网格的顶部分页器的GridViewRow对象。

1.2 模板化控件

可以使用ControlTemplate的控件即为模板化控件(TemplatedControl),在UWP中,所有派生自Control的控件(除了UserControl)都是模板化控件,例如Button、ComboBox等,它们中的大部分都有默认的ControlTemplate。

模板化控件包含以下两个部分:

  • 代码: 定义控件属性及行为。
  • DefaultStyle: 定义控件属性默认样式,包括属性值及ControlTemplate。可以不存在DefaultStyle,所以某些场合会把模板化控件称为“无外观控件”。

GridView控件中的每一列由一个 DataControlField对象表示。默认情况下,AutoGenerateColumns属性被设置为 true,为数据源中的每一个字段创建一个 AutoGeneratedField对象。每个字段然后作为 GridView控件中的列呈现,其顺序同于每一字段在数据源中出现的顺序。
通过将 AutoGenerateColumns属性设置为 false,然后定义您自己的列字段集合,您也可以手动控制哪些列字段将显示在 GridView控件中。不同的列字段类型决定控件中各列的行为。下表列出了可以使用的不同列字段类型。
列字段类型
说明
BoundField
澳门新濠3559,显示数据源中某个字段的值。这是 GridView控件的默认列类型。
ButtonField
为 GridView控件中的每个项显示一个命令按钮。这使您可以创建一列自定义按钮控件,如“添加”按钮或“移除”按钮。
CheckBoxField
为 GridView控件中的每一项显示一个复选框。此列字段类型通常用于显示具有布尔值的字段。
CommandField
显示用来执行选择、编辑或删除操作的预定义命令按钮。
HyperLinkField
将数据源中某个字段的值显示为超链接。此列字段类型允许您将另一个字段绑定到超链接的 URL。
ImageField
为 GridView控件中的每一项显示一个图像。
TemplateField
根据指定的模板为 GridView控件中的每一项显示用户定义的内容。此列字段类型允许您创建自定义的列字段。

1.概述

UWP允许开发者通过两种方式创建自定义的控件:UserControl和TemplatedControl(模板化控件)。这个主题主要讲述如何创建和理解模板化控件,目标是能理解模板化控件常见的知识点,并且可以创建扩展性良好的模板化控件。

GridView控件的属性

2.2 Themes/Generic.xaml

<Style TargetType="local:MyFirstControl" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:MyFirstControl">
                <Border
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

XAML负责定义控件的外观。在第一次创建控件后VisualStudio会自动创建这个文件,并且插入图中的代码。注意其中两个TargetType="local:MyFirstControl",第一个用于匹配MyFirstControl.cs中的DefaultStyleKey,第二个确定ControlTemplete针对的控件类型。两个都不可以移除。Style的内容是一组Setter的集合,除了Template外,还可以添加其它的Setter指定控件的默认外观。

2. 创建第一个模板化控件

下面介绍如何使用VisualStudio在一个新项目中创建一个模板化控件。

澳门新濠3559 2

如图所示,在“添加新项对”话框中选中TemplatedControl,名称部分输入“MyFirstControl”,点击“添加”后VisualStudio会自动在项目中添加两个文件:MyFirstControl.cs和Themes/Generic.xaml:

澳门新濠3559 3

2.4 使用Blend修改DefaultStyle

就算经验丰富的开发者仍免不了使用Blend这个工具来编辑Style和ControlTemplate,幸好Blend上手十分简单。

使用Blend打开项目后,在“资源”面板展开Generic.xaml节点,选中MyFirstControl,点击编辑资源:

澳门新濠3559 4

在“对象与时间线”面板,选中“Style”节点可在右侧“属性”面板编辑Style中除Template以外的属性:
澳门新濠3559 5

在“Style”节点,右键打开菜单,选中“编辑模版”->“编辑当前项”开始编辑Template,此时左侧“对象与时间线”面板展示Template中的结构:

澳门新濠3559 6

澳门新濠3559 7

此后,可在编辑区域的上方选择编辑Style或者编辑Template:

澳门新濠3559 8

由于这个主题主要目的是介绍模板化控件,所以不会深入讨论Blend的操作。

编辑:操作系统 本文来源:GridView控件的属性,目标是能理解模板化控件常见

关键词: