WPF笔记(三)
WPF 控件一览
此处列出了内置的 WPF 控件。
· 按钮:Button 和 RepeatButton。
· 对话框:OpenFileDialog、PrintDialog 和 SaveFileDialog。
· 数字墨迹:InkCanvas 和 InkPresenter。
· 文档:DocumentViewer、FlowDocumentPageViewer、FlowDocumentReader、FlowDocumentScrollViewer 和 StickyNoteControl。
· 输入:TextBox、RichTextBox 和 PasswordBox。
· 布局:Border、BulletDecorator、Canvas、DockPanel、Expander、Grid、GridView、GridSplitter、GroupBox、Panel、ResizeGrip、Separator、ScrollBar、ScrollViewer、StackPanel、Thumb、Viewbox、VirtualizingStackPanel、Window 和 WrapPanel。
· 媒体:Image、MediaElement 和 SoundPlayerAction。
· 菜单:ContextMenu、Menu 和 ToolBar。
· 导航:Frame、Hyperlink、Page、NavigationWindow 和 TabControl。
· 选择:CheckBox、ComboBox、ListBox、TreeView、RadioButton 和 Slider。
· 用户信息:AccessText、Label、Popup、ProgressBar、StatusBar、TextBlock 和 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; }
}
}
}