WPF系列:基本布局

StackPanel

  StackPanel可以作为Window的一个子元素,并在其中包含多个元素,并逐个显示元素,可以是水平(Horizontal)排列或者垂直(Vertical)排列

    <StackPanel Orientation="Vertical">
        <Label>Lable</Label>
        <TextBox>TextBox</TextBox>
        <Button>Button</Button>
        <CheckBox>CheckBox</CheckBox>
        <CheckBox>CheckBox</CheckBox>
        <ListBox>
            <ListBoxItem>ListBoxItem1</ListBoxItem>
            <ListBoxItem>ListBoxItem2</ListBoxItem>
            <ListBoxItem>ListBoxItem3</ListBoxItem>
        </ListBox>
    </StackPanel>

WarpPanel

  WarpPanel和StackPanel类似,不同的是WapPanel内的元素会自动换行,在同一行或者同一列中,如果窗口不能够显示所有元素,会将多出的部分自动换行,并且能够随着窗口的变化自动适应;排列顺序是从左到右或者从上到下,取决于Orientation的值

   <WrapPanel Orientation="Horizontal">
       <Button Width="100" Margin="10">Button1</Button>
       <Button Width="100" Margin="10">Button2</Button>
       <Button Width="100" Margin="10">Button3</Button>
       <Button Width="100" Margin="10">Button4</Button>
       <Button Width="100" Margin="10">Button5</Button>
       <Button Width="100" Margin="10">Button6</Button>
       <Button Width="100" Margin="10">Button7</Button>
       <Button Width="100" Margin="10">Button8</Button>
       <Button Width="100" Margin="10">Button9</Button>
       <Button Width="100" Margin="10">Button10</Button>
   </WrapPanel>

Canvas

  Canvas是一个允许显示指定元素位置的面板。主要是通过附加属性Canvas.Top、Canvas.Left、Canvas.Right、Canvas.Bottom指定位置

        <Canvas Background="Beige">
            <Label Canvas.Left="30" Canvas.Top="50" Content="Account:" ></Label>
            <TextBox Canvas.Left="90" Canvas.Top="50" Width="100"></TextBox>
            <Button Canvas.Left="100" Canvas.Top="80" Content="sign in"></Button>
        </Canvas>

DockPanel

  DockPanel可以指定排列子控件的区域,用过WinForm的童鞋应该还记得控件的Dock属性吧,DockPanel就和Dock是一样的效果;DockPanel也是通过附加属性DockPanel.Top、DockPanel.Left、DockPanel.Right、DockPanel.Bottom指定内部元素区域。

   <DockPanel>
       <Border Height="30" Background="AliceBlue" DockPanel.Dock="Top">
           <TextBlock>North</TextBlock>
       </Border>
       <Border Height="30" Background="Aqua" DockPanel.Dock="Bottom">
           <TextBlock>South</TextBlock>
       </Border>
       <Border Width="80" Background="LightSteelBlue" DockPanel.Dock="Left">
           <TextBlock>West</TextBlock>
       </Border>
       <Border Width="30" Background="Beige" DockPanel.Dock="Right">
           <TextBlock>East</TextBlock>
       </Border>
       <Border  Background="HotPink" >
           <TextBlock>Center</TextBlock>
       </Border>
   </DockPanel>

Grid

  Grid网格布局,可以通过ColumnDefinition指定列,通过RowDefinition指定行;通过Grid.Row、Grid.Column指定元素所在的行和列(索引从0开始);通过Grid.ColumnSpan和Grid.RowSpan指定元素所占的列数和行数;“*”符号可以表示元素的宽或者高

  (Grid的总高度(或宽)- 已经指定高度(或宽))/N * M(指”*“号表示的高(或者宽))

    <Grid ShowGridLines="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="100"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="2*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <Button Background="DarkCyan"></Button>
        <Button Grid.Row="1" Grid.Column="1" Background="DarkGreen"></Button>
        <Button Grid.Row="2" Grid.ColumnSpan="2"  Background="DarkBlue"></Button>
        <Button Grid.Row="3"  Grid.RowSpan="2"  Background="Purple"></Button>
    </Grid>

  Grid的强大之处是它还支持拆分器(GridSplitter),允许用户调整各个单元格的大小

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="50"></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Label Grid.Column="0" Background="Cyan" Content="1"></Label>
        <GridSplitter Grid.Column="0" Width="10" Background="Gray"></GridSplitter>
        <Label Grid.Column="1" Background="BlanchedAlmond" Content="2"></Label>
    </Grid>

时间: 2024-10-11 23:08:34

WPF系列:基本布局的相关文章

自学WPF系列(1)

介绍 使用WPF工作6个多月了,是时候写一些WPF的基础知识了.在这个主题上我已经写了几篇文章了.他们都是基于处理一些具体的问题而完成的.现在我抛砖引玉,并让您理解如何/为什么WPF作为革命性的UI开发走向了我们. 由于这是一篇适合初学者和中级水平的程序员的文章,我将尽量给出尽可能多的基本的例子. Windows Presectation Foundation 正如名字所示,WPF实际上是.NET Framework3.0引入的几个framework.它实际上是提出了一套新的类和程序集并允许我们

WPF系列之二:解耦View层控件事件与ViewModel层事件的响应

以前的做法: 1.当项目的时间比较紧迫的时候,对UI层中控件的事件的处理,往往采取的是类似Winform中最简单的做法,直接做一个事件的Handler直接去调用VM层的方法. 2.控件只有一个Command属性,其它的事件的处理方法没有办法和ViewModel层进行解耦的时候往往也采取上面提到的方法. 如下图所示: 新的做法: 为了实现事件的处理与View层的解耦,我们可以利用WPF提供的附加属性来为需要的事件添加附加行为.附加属性扮演了一个在View层与Model层牵线的角色. 需要下面三个步

WPF系列之三:实现类型安全的INotifyPropertyChanged接口,可以不用“Magic string” 么?

通常实现INotifyPropertyChanged接口很简单,为你的类只实现一个PropertyChanged 的Event就可以了. 例如实现一个简单的ViewModel1类: public class ViewModel1 : INotifyPropertyChanged { private string _data; public string Data { get { return _data; } set { if (_data == value) return; _data = v

WPF中Grid布局

WPF中Grid布局XMAl与后台更改,最普通的登录界面为例. <Grid Width="200" Height="100" > <!--定义了两列--> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="100*"/> </Grid.Column

[WPF系列]-数据邦定之DataTemplate 对分层数据的支持

到目前为止,我们仅讨论如何绑定和显示单个集合. 某些时候,您要绑定的集合包含其他集合. HierarchicalDataTemplate 类专用于 HeaderedItemsControl 类型以显示这样的数据. 实例演示 在下面的示例中,ListLeagueList 是 League 对象的列表. 每个 League 对象都有一个 Name 和 Division 对象的集合. 每个 Division 都有一个 Name 和 Team 对象的集合,并且每个 Team 对象都有一个 Name. <

[WPF系列-数据邦定之DataTemplate 根据对象属性切换模板

  引言 书接上回[WPF系列-数据邦定之DataTemplate],本篇介绍如何根据属性切换模板(DataTemplate)   切换模板的两种方式:   使用DataTemplateSelector来切换模板 使用DataTrigger来实现模板切换. 使用Style来是实现模板切换   A DataTemplateSelector does not respond to PropertyChange notifications, so it doesn't get re-evaluated

WPF入门教程系列六——布局介绍与Canvas

从这篇文章开始是对WPF中的界面如何布局做一个较简单的介绍,大家都知道:UI是做好一个软件很重要的因素,如果没有一个漂亮的UI,功能做的再好也无法吸引很多用户使用,而且没有漂亮的界面,那么普通用户会感觉这个软件没有多少使用价值. 一. 总体介绍 WPF的布局控件都在System.Windows.Controls.Panel这个基类下面,使用 WPF提供的各种控件在WPF应用程序中界面进行布局,同时对各种子控件(如按钮.文本框,下拉框等)进行排列组合. Pane类的公共属性太多了.就简单介绍几个常

WPF入门教程系列六——布局介绍与Canvas(一)

从这篇文章开始是对WPF中的界面如何布局做一个较简单的介绍,大家都知道:UI是做好一个软件很重要的因素,如果没有一个漂亮的UI,功能做的再好也无法吸引很多用户使用,而且没有漂亮的界面,那么普通用户会感觉这个软件没有多少使用价值. 一. 总体介绍 WPF的布局控件都在System.Windows.Controls.Panel这个基类下面,使用 WPF提供的各种控件在WPF应用程序中界面进行布局,同时对各种子控件(如按钮.文本框,下拉框等)进行排列组合. Pane类的公共属性太多了.就简单介绍几个常

WPF基础到企业应用系列6——布局全接触

一. 摘要 首先很高兴这个系列能得到大家的关注和支持,这段时间一直在研究Windows Azure,所以暂缓了更新,同时也本着想把它写好.宁缺毋滥的精神,在速度上自然也就慢了下来,这篇文章拖拖拉拉也经历了十多天才发布出来(每天写一点),不过请大家放心,这个系列一定会继续写下去.由于自己才疏学浅且是对这些技术的使用总结和心得体会,错误之处在所难免,怀着技术交流的心态,在这里发表出来,所以希望大家能够多多指点,这样在使一部分人受益的同时也能纠正我的错误观点,以便和各位共同提高. 这篇文章主要是对WP