中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > .NET > 其他
使用Grid来对WPF页面进行布局排版(1)
作者:蝈蝈俊.net 时间:2007-09-05 15:18 出处:csdn 责编:月夜寒箫
              摘要:使用Grid来对WPF页面进行布局排版(1)

【引自蝈蝈俊.net的博客】对于以前用Windows Form来开发客户端程序的程序员,在使用WPF开发客户端的程序时,在窗体布局上将是他必须面对的一个坎。

布局产生困惑的一个典型场景如下:

我们在开发WPF窗体时候,我们会发现,当我们把菜单控件(Menu)、工具条(ToolBar、ToolBarPanel)、状态条(StatusBar)这些最常见的页面元素拖动到WPF窗体的时候。我们会发现WPF窗体中,这些页面元素可以放置在任何位置,而不是之前Windows Form那样:主菜单在最上面,状态条在最下面。

WPF中每一个元素如何布局变得更加灵活了,这样可以让美工更好的设计出更漂亮的页面,但是也会让一些缺乏艺术细胞的技术人员页面布局变得巨难看无比。比如我最近在写个简单的调查系统客户端维护工具,使用WPF程序来开发,这个页面布局的事情,就让我非常头大。

WPF跟布局有关的控件很多,System.Windows.Controls.Panel是这些所有布局有关的类的基类。需要注意的是,我们在页面布局上一般都是使用这个类的扩展类来处理布局,而不是使用这个类。这些扩展类包括:

System.Windows.Controls.Canvas  (画布)

System.Windows.Controls.DockPanel  (停靠布局)

System.Windows.Controls.Grid  (表格)

System.Windows.Controls.StackPanel  (堆栈布局)

System.Windows.Controls.VirtualizingPanel  (虚堆栈布局)

System.Windows.Controls.WrapPanel  (覆盖布局)

我自己在使用中觉得:对于我们从Window Form习惯来的技术人员,使用Grid(表格)布局就可以满足我们绝大多数的布局需求,而且简单。下面我们就来介绍如何使用Grid布局控件来进行窗体布局设计。

Grid布局控件很类似HTML标签中的Table标签。我们事先把一个区域划分成不同的表格,然后决定,某些控件放在那个表格中,那些控件是要跨多少个表格来放置。比如下面窗体效果,是由后面的XAML文件来实现这个效果的。

这个窗口布局上,我使用了Grid控件

我把这个窗口首先划分成三行三列的一个Grid。如上图我对这个窗体的拆分。

最上面的显示多少条目、下拉列表框和刷新按钮,被放在第一行,跨三列;未发布的调查表列表框被放在第二行,第一列;支持来回拖动的GridSplitter被我放在了第二列,第二行;ListView则被我放在了第二行,第三列;最下面的确定,取消按钮被我放在了第三行,跨了三个列。

上述界面效果的XAML文件如下:

            

<Window

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

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

x:Class="HongjunGuo.SurveySystem.Client.QuestionnaireList"

Title="调查列表" Height="300" Width="500">

<Grid >

<Grid.ColumnDefinitions>

<ColumnDefinition Width="150"/>

<ColumnDefinition Width="5" />

<ColumnDefinition Width="*"/>

</Grid.ColumnDefinitions>

<Grid.RowDefinitions>

<RowDefinition Height="35"/>

<RowDefinition Height="*"/>

<RowDefinition Height="35"/>

</Grid.RowDefinitions>

<DockPanel Height="30" Name="dockPanel2" Grid.ColumnSpan="3" Grid.Row="0">

<Label>显示多少条目:</Label>

<ComboBox Height="21" Name="comboBox1" Width="120" >

<ComboBoxItem IsSelected="True" >5</ComboBoxItem>

<ComboBoxItem>10</ComboBoxItem>

<ComboBoxItem>20</ComboBoxItem>

<ComboBoxItem>50</ComboBoxItem>

</ComboBox>

<Button Height="23" Name="button1" Width="75">刷新</Button>

</DockPanel>

<ListBox IsSynchronizedWithCurrentItem="True" Name="lb_Type" 

Width="Auto" Grid.Column="0" Grid.Row="1"  >

<ListBoxItem Name="lbi_Draft" ToolTip="最近使用的,并且没有被发布的调查表"

Content="本地未发布的调查表草稿" Height="50" IsSelected="True"/>

<ListBoxItem Name="lbi_Release" Content="本地最近发布的调查表" Height="50"/>

<ListBoxItem Name="lbi_Seatch" Content="服务器上的调查列表" Height="50"/>

</ListBox>

<GridSplitter Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left"

Name="gridSplitter1" Width="10" />

<ListView Name="lv_Data" IsSynchronizedWithCurrentItem="True"

Grid.Column="3" Grid.Row="1">

<ListView.View>

<GridView>

<GridViewColumn Header="编号">

</GridViewColumn>

<GridViewColumn Header="标题">

</GridViewColumn>

<GridViewColumn Header="创建时间">

</GridViewColumn>

</GridView>

</ListView.View>

</ListView>

<DockPanel Height="30" Name="dockPanel4"  Grid.ColumnSpan="3" Grid.Row="2">

<Button Height="23" Name="btn_OK" Width="75" IsDefault="True"

Click="btn_OK_Click">确 定</Button>

<Button Height="23" Name="btn_Cancel" Width="75"

IsCancel="True">取 消</Button>

</DockPanel>

</Grid>

</Window>

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有