WPF笔记(三)

14年前

WPF 控件一览

此处列出了内置的 WPF 控件。

·                   按钮Button RepeatButton

·                   对话框OpenFileDialogPrintDialog SaveFileDialog

·                   数字墨迹InkCanvas InkPresenter

·                   文档DocumentViewerFlowDocumentPageViewerFlowDocumentReaderFlowDocumentScrollViewer StickyNoteControl

·                   输入TextBoxRichTextBox PasswordBox

·                   布局BorderBulletDecoratorCanvasDockPanelExpanderGridGridViewGridSplitterGroupBoxPanelResizeGripSeparatorScrollBarScrollViewerStackPanelThumbViewboxVirtualizingStackPanelWindow WrapPanel

·                   媒体ImageMediaElement SoundPlayerAction

·                   菜单ContextMenuMenu ToolBar

·                   导航FrameHyperlinkPageNavigationWindow TabControl

·                   选择CheckBoxComboBoxListBoxTreeViewRadioButton Slider

·                   用户信息AccessTextLabelPopupProgressBarStatusBarTextBlock ToolTip

 

 

布局

创建 UI 时,您通过按位置和大小排列控件来形成一种布局。任何布局的主要要求都是适应窗口大小和显示设置的变化。WPF 为您提供了一个一流的可扩展布局系统,而不是强制您编写代码以使布局适应这些情况。

布局系统的基础是相对定位,它提高了适应窗口和显示条件变化的能力。此外,布局系统还管理控件之间的协商以确定布局。协商过程分为两步:第一步,控件向父控件通知它所需的位置和大小;第二步,父控件通知该控件它可以具有多大空间。

布局系统通过基本 WPF 类公开给子控件。对于通用的布局,如网格、堆叠和停靠,WPF 包括了几个布局控件:

·                   Canvas:子控件提供其自己的布局。

·                   DockPanel:子控件与面板的边缘对齐。

·                   Grid:子控件按行和列放置。

·                   StackPanel:子控件垂直或水平堆叠。

·                   VirtualizingStackPanel:子控件被虚拟化,并沿水平或垂直方向排成一行。

·                   WrapPanel:子控件按从左到右的顺序放置,如果当前行中的控件数多于该空间所允许的控件数,则换至下一行。

下面的示例使用 DockPanel 排列几个 TextBox 控件。

<Window

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

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

    x:Class="SDKSample.LayoutWindow"

    Title="Layout with the DockPanel" Height="143" Width="319">

 

  <!--DockPanel to layout four text boxes-->

  <DockPanel>

    <TextBox DockPanel.Dock="Top">Dock = "Top"</TextBox>

    <TextBox DockPanel.Dock="Bottom">Dock = "Bottom"</TextBox>

    <TextBox DockPanel.Dock="Left">Dock = "Left"</TextBox>

    <TextBox Background="White">This TextBox "fills" the remaining space.</TextBox>

  </DockPanel>

 

</Window>

DockPanel 允许子 TextBox 控件通知它如何排列这些子控件。为此,DockPanel 实现一个 Dock 属性,该属性公开给子控件,以便每个子控件指定一个停靠样式。

下图演示了上一示例中 XAML 标记的结果。

 

数据绑定

创建大多数应用程序的目的是为用户提供查看和编辑数据的方式。对于 WPF 应用程序,存储和访问数据的工作已经由 Microsoft SQL Server ADO.NET 之类的技术提供。访问数据并将数据加载到应用程序的托管对象中后,WPF 应用程序的复杂工作才开始。实质上它涉及到两个步骤:

1.           将数据从托管对象复制到控件中,在控件上可以显示和编辑数据。

2.           确保将使用控件对数据进行的更改复制回托管对象。

为了简化应用程序开发,WPF 提供了一个数据绑定引擎以自动执行这些步骤。数据绑定引擎的核心单元是 Binding 类,它的任务是将控件(绑定目标)绑定到数据对象(绑定源)。下图说明了这种关系。

下面的示例演示如何将 TextBox 绑定到自定义 Person 对象的实例。下面的代码演示了 Person 的实现。

namespace SDKSample

{

    class Person

    {

        string name = "No Name";

 

        public string Name

        {

            get { return name; }

            set { name = value; }

        }

    }

}