WPF第一篇and一点絮叨

开始写博客的初衷来自前两天看的一本叫做《程序员羊皮卷》的书。里面讲工作应该写周总结,坚持下来一年五十几周便可以很明显的看到自己的进步,而且真正有技术的人应该善于表现自己。我只是前者,而非后者,我在向后者努力。

言归正传。从九月十一号面试通过开始接触WPF到现在已经有不到两个礼拜的时间了。C#了解个差不多,但是不深入,一些概念还需强化。因为不是从最初开始记录的,所以现在觉得最简单的HelloWorld开始写起也没必要,因为对于读者来说,不至于要进入这个领域还不会连这个都不会写;对于我个人来说,这只是一个日志性文件。

开门见山。之前已经说过,如果接触过Android开发的话,WPF很容易上手。其思想一致,都是以标签语言实现界面布局,以编程语言实现内部逻辑,以自家提供的框架实现二者整合。单从浅层编程来看,二者几乎完全相同。基于以上,我们要学习的就两点,一,编程语言,这是基础,二,XAML的布局。这两者之间的独立性很强,即便是一点都不懂C#语言的,只用XAML就可以写出令人惊叹的效果。接下来主要讲XAML。

都是初学者,大部分的代码都是根据学来的比着葫芦画瓢。

概括讲,XAML要实现的就是布局,控件,效果。

拿简单的HTML举例:

<HTML>

    <head>

    </head>

    <body>

    <body>

<HTML>


<html></html>之间夹着两个元素,<head></head>和<body></body>,而这两个元素之间既可以添加标签,也可以直接写内容。

对比XAML

<Grid>

    <Button Fill="Red"/>

<Grid>

<Grid></Grid>为网格布局标签,中间夹着一个<Button></Button>.

大概框架就是这样,标签内部套标签。这个例子体现了上面所说的三点:布局--<Grid></Grid>;控件--<Button/>;效果--Fill="Red"。

一.布局

布局就是讲设计的界面中的各个元素如何排列显示。布局有以下几种

Grid 网格布局,可以定义行数,列数,基本和HTMl中的table用法相似;

UniformGrid 统一网格布局,会自动根据内部元素个数将面板等分为n^2块,比如有三个元素,就会分2*2块,有五个元素就会分3*3块

StackPanel 栈嘛,线性排列,可以设置Orientation属性为垂直线性Vertical或者水平线性Horizontal;

DockPanel 停靠布局,举例说Windows的任务栏(我不知道具体实现是不是这个,但是行为和这一样)一般是在窗口下面,也就是任务栏的DockPanel.Dock="Bottom",左边停靠就是DockPanel.Dock="Left",还有Right,Top等。

WrapPanel 包裹元素,只包裹好内部元素即可。

Canvas 画布,在上面可以用绝对布局的方式来定位。


详细的代码和效果

整体以Grid布局,分为了两行三列,每个格子里面放一种布局

<Window x:Class="CSDN.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="500" Width="1000">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <!--Grid布局-->
        <Grid Grid.Column="0" Grid.Row="0">
            <!--定义两行三列-->
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <!-- end定义两行三列-->


            <!--放入Button并设置位置-->
            <Button Content="Button11" Grid.Column="0" Grid.Row="1"/>
            <Button Content="Button12" Grid.ColumnSpan="2" Grid.Column="0"/>
            <Button Content="Button13" Grid.RowSpan="2" Grid.Column="2"/>
            <!--end放入Button并设置位置-->
        </Grid>
        <!--Grid布局-->


        <!--StackPanel布局-->
        <StackPanel Orientation="Vertical"  Grid.Column="1" Grid.Row="0">
            <Button Content="Button21"/>
            <Button Content="Button22"/>
            <Button Content="Button23"/>
            <Button Content="Button24"/>
        </StackPanel>
        <!--endStackPanel布局-->
        <!--DockPanel布局(添加了LastChildFill属性)-->
        <DockPanel LastChildFill="True"  Grid.Column="2" Grid.Row="0">
            <Button Content="Button31" DockPanel.Dock="Bottom"/>
            <Button Content="Button32" DockPanel.Dock="Bottom"/>
        </DockPanel>
        <!--endDockPanel布局(添加了LastChildFill属性)-->
        <!--WrapPanel布局(注意WrapPanel)只是包括button区域,其他都是整个大方块-->
        <WrapPanel  Grid.Column="0" Grid.Row="1">
            <Button Content="Button41"/>
            <Button Content="Button42"/>
        </WrapPanel>
        <!--endWrapPanel布局-->
        <!--Canvas布局-->

        <Canvas  Grid.Column="1" Grid.Row="1">
            <Button Content="Button51" Canvas.Left="39" Canvas.Top="93"/>
            <Button Content="Button52" Canvas.Left="149" Canvas.Top="79"/>
            <Button Content="Button53" Canvas.Left="117" Canvas.Top="156"/>
        </Canvas>
        <!--endCanvas布局-->
        <!--UniformGrid布局-->

        <UniformGrid Grid.Column="2" Grid.Row="1">
            <Button Content="Button61"/>
            <Button Content="Button62"/>
        </UniformGrid>
        <!--end UniformGrid布局(注意只有两个元素,但是也划分了四个区域)-->
    </Grid>
</Window>

效果

http://my.csdn.net/my/album/detail/1657295#1657295

谁能告诉我怎么发图片啊,添加了怎么不显示啊


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值