WPF入门——XAML和布局容器

WPF是微软推出的基于Windows Vista的用户界面框架;它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作。WPF和.NET中winForm是类似的。

XAML

1.XAML是对WPF程序的所用用户界面进行详细的定制。

2.它提供了一种便于扩展和定位的语法来定义和程序逻辑分离的用户界面,而这种实现方式和ASP.NET中的"代码后置"模型非常类似。

3.但是XAML并不是一种用于程序设计的语言,它的功能也不是为了执行应用程序逻辑。

4.说的通俗一点,WPF是一种框架,而在框架中布局元素的语言是XAML语言。

容器

1.主要是用于元素在窗体中的布局。

2.WPF中提供了许多的容器元素,wrappanel,dockpanel,stackpanel

warppanel

按行或者按列排序的。通过Orientation属性去设置它的排序顺序。

<Window x:Class="panelWPF.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
    <WrapPanel Margin="24,51,23,41"  Orientation="Vertical">
        <Button Content="Button1" Width="75"/>
        <Button Content="Button2" Width="75"/>
        <Button Content="Button3" Width="75"/>
    </WrapPanel>
</Window>

dockpanel

利用它的Dock属性设置控件的布局,置于顶部或者下部或者左部、右边。

<Window x:Class="panelWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="348.507" Width="787.687">
    <DockPanel HorizontalAlignment="Left" Margin="94,73,0,0" VerticalAlignment="Top" Height="221" Width="588" LastChildFill="True">
        <Button Content="Button2" Name="button2" DockPanel.Dock="Top"/>
        <Button Content="Button3" Name="button3"  DockPanel.Dock="Bottom"/>
        <Button Content="Button1" DockPanel.Dock="Left" Name="button1" />
        <Button Content="Button4" Name="button4" DockPanel.Dock="Right"/>
        <Button Content="Button5" Name="button5" />
    </DockPanel>
</Window>

Grid

它可以将窗口分割成更小区域,能够将元素分割到不可见的网格中。有点类似于HTML中table

分割窗体:将窗体分割成两行三列。

<Window x:Class="gridWPF.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
    <Grid ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
    </Grid>
</Window>

在方格中放入“按钮”元素:在第一行的第一列放一个,在第一行和第二行第三列各放一个。

</pre><pre name="code" class="plain" style="font-family: arial, sans-serif; font-size: 14px;"><Window x:Class="gridWPF.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
    <Grid ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Button Content="left top" Grid.Row="0" Grid.Column="0" Margin="3"></Button>
        <Button Content="right top" Grid.Row="0" Grid.Column="2" Margin="3"></Button>
        <Button Content="right button" Grid.Row="1" Grid.Column="2" Margin="3"></Button>
    </Grid>

</Window>

调整grid分割格的宽度的尺寸,有三种方式:1.绝对的,直接设置with属性的数值。2.自动的,刚好满足需要,最灵活,比如设置width为auto。3.按比例数值尺寸,比如设置width的%比为‘4*’。

<Window x:Class="gridWPF.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
    <Grid ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*"></ColumnDefinition>
            <ColumnDefinition  ></ColumnDefinition>
            <ColumnDefinition Width="auto"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Button Content="left top" Grid.Row="0" Grid.Column="0" Margin="3"></Button>
        <Button Content="right top" Grid.Row="0" Grid.Column="2" Margin="3"></Button>
        <Button Content="right button" Grid.Row="1" Grid.Column="2" Margin="3"></Button>
    </Grid>

</Window>

设置分割格中的元素能跨越多个列或者多个行,分别使用grid属性ColumnSpan和RowSpan比如设置"left top"跨域一列。

<Button Content="left top" Grid.ColumnSpan="2" Grid.Row="0" Grid.Column="0" Margin="3"></Button>

设置可拖动分割窗口:使用GridSplitter控件。在第二列中添加一个GridSplitter分割器,拖动调节格子的大小。

<Window x:Class="gridWPF.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
    <Grid ShowGridLines="False">
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*" MinWidth="40"></ColumnDefinition>
            <ColumnDefinition  Width="auto"></ColumnDefinition>
            <ColumnDefinition Width="auto"  MinWidth="40"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Button Content="left top"  Grid.Row="0" Grid.Column="0" Margin="3" ></Button>
        <Button Content="right top" Grid.Row="0" Grid.Column="2" Margin="3"></Button>
        <Button Content="right button" Grid.Row="1" Grid.Column="2" Margin="3" ></Button>
        <GridSplitter Grid.Column="1" Grid.RowSpan="2" Width="10" VerticalAlignment="Stretch"  HorizontalAlignment="Center" />
    </Grid>

</Window>


总结

对WPF以及XAML语言的一个初步的了解和学习;以及对布局容器的应用,它能使元素布局的调节起来更方便。以后的学习会在工作中深入。

时间: 2024-10-15 08:06:12

WPF入门——XAML和布局容器的相关文章

GTK入门学习:布局容器之水平布局

如果我们希望窗口里多放添加几个控件,直接添加是不成功的,因为窗口只能容纳一个控件的容器.这时候,我们需要借助布局容器,我们先把布局容器添加到窗口里,然后再把所需要添加的控件放在布局容器里. 布局容器的主要分类:水平布局( GtkHBox).垂直布局(GtkVBox ).表格布局(GtkTable).固定布局(GtkFixed ). 水平布局容器: 水平布局容器的创建: GtkWidget *gtk_hbox_new( gboolean homogeneous, gint spacing ); h

GTK入门学习:布局容器之垂直布局

垂直布局和水平布局的用法基本是一样,无非是新建垂直布局容器接口,还有控件摆放的方向不同. 垂直布局容器的创建: GtkWidget *gtk_vbox_new( gboolean homogeneous, gint spacing ); 完整代码如下: #include <gtk/gtk.h> int main(int argc, char *argv[]) { //1.gtk初始化 gtk_init(&argc, &argv); //2.创建一个窗口 GtkWidget *w

GTK入门学习:布局容器之表格布局

学习水平和垂直布局容器后,我们几乎能布出任何风格的布局,只需要嵌套使用水平布局容器和垂直布局容器即可.假如我们要完成下图的布局,我们该怎么做呢? 1)创建一个垂直布局容器( A ) 2)创建一个水平布局容器( B ),一个close按钮( C ) 3)将水平布局容器和close按钮添加到垂直布局容器里( 将 B 和 C 添加到 A ) 4)创建button 1按钮( D ) 和 button 2按钮( E ) 5)再将button 1按钮 和 button 2按钮添加到水平布局容器里( 将 D

GTK入门学习:布局容器之固定布局

前面我们学习的水平.垂直和表格布局容器,控件会跟着容器大小的变化进行自动适应,而固定布局容器里的控件则不会跟着变化( 则固定不变 ). 固定布局的创建: GtkWidget *gtk_fixed_new(void); 返回值:固定布局容器指针 固定布局容器添加控件: void gtk_fixed_put( GtkFixed *fixed, GtkWidget *widget, gint x, gint y ); fixed:容纳控件的容器 widget:要添加的控件 x, y:控件摆放位置的起点

elementUI 学习入门之 container 布局容器

Container 布局容器 用于布局的容器组件,方便快速搭建页面基本结构 <el-container> : 外层容器.当子元素包含 <el-header> 或 <el-footer> 时,全部子元素会垂直上下排列,否则水平左右排列 <el-header> : 顶栏容器 <el-aside> : 侧边栏容器 <el-main> : 主要区域容器 <el-footer> : 底边栏容器 这些组件均采用 flex 布局.<

WPF 10天修炼 - WPF布局容器

WPF布局 WPF的窗口也就是Window类,是一个内容控件,该控件派生自ContentControl.内容控件有一个Content属性,该属性有一个限制,只能放置一个用户界面元素,或一个字符串.为了在窗口上放置多个界面控件,通常在窗口上放置一个容器控件. WFP布局原则 1.  元素不应该指定 确定的尺寸大小,同很惨更应该使其大小自动适应内容.比如按钮根据所添加的文本来扩展其大小.可以通过设置maximun和minimun尺寸来限制控件可接受的尺寸大小. 2.  元素不应该使用屏幕坐标来指定其

学习WPF1.1——WPF布局——初识布局容器

StackPanel堆叠布局 StackPanel是简单布局方式之一,可以很方便的进行纵向布局和横向布局 StackPanel默认是纵向布局的 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/

WPF入门基础教程之布局(1)

WPF的常用布局控件的介绍及使用方法 (1) 开局一张图,内容全靠写,本系列的文章, 主要针对刚入门.亦或是从 winform/bs转过来的开发人员快速入门的指南, 相对于其它一些文章中会详细的从项目如何建立到其实现的原理及组成部分, 本系列的文章则旨在如果快速的构建: 从布局.样式.触发器.绑定.显示.MVVM架构一系列的阶段学习,构建一个基础的呈现以达到学习的目的. WPF相关资料合集 (含书籍.框架.及开源UI组件等) WPF编程宝典.pdf 深入浅出WPF.pdf MaterialDes

WPF布局容器

原文:WPF布局容器 1.StackPanel:堆栈面板,通过Orientation属性设置子元素的布局排列方向为"Vertical"(垂直)和"Horizontal"(水平),不写其默认值为"Vertical",当设置为"Vertical"时子元素会沿垂直方向拉伸,反之设置为"Horizontal"时子元素会沿水平方向拉伸. 2.DockPanel:支持子元素停靠在面板的任意一条边上,通过附加属性Dock