WPF程序总结-01

一、常用控件(controls):任何一个控件在代码里都可以new来产生。

1、界面控件:

  • Button:按钮。其显示内容的属性为 Content 。
  • Grid:网格。该控件是将页面像Excel一样划分成行和列的形式。
  • TextBlock:只读文本块,不可以修改,不可以复制。
  • TextBox:文本框,可读可改。其有一个属性为 BorderBrush 可以设置边线的颜色。
  • PasswordBox:密码框。可以让在该框中输入密码时,显示为星星或圆点。
  • RadioButton:单选框,同一组中只能选择其中一个。
  • DatePicker:用来进行日期选择。(其中的 SelectedDate表示选中的日期)
  • Image:在窗口显示图片。(添加照片时需要用 Source="002.jpg" 。002.jpg为照片的路径)
  • ProgressBar:进度条。其常用的属性有:Minimum(最小值)、 Maximum(最大值)、 Value(当前值)、IsIndeterminate="True"(表示不确定进度)
  • Menu:菜单控件,用来显示窗口的菜单栏,可以包括子菜单。其子控件都放在<Menu></Menu>之间。MenuItem为其子控件,每个菜单项都叫做 MenuItem。 它来配置Menu的属性,如Header 显示该菜单项的内容。
  • MenuItem:菜单项。用来显示Menu的菜单项。
  • Toolbar:工具条,放入其中的控件都有默认的外观。可以通过在Button 的 Content 中放置Image 来实现。
  • ComboBox:表示带有下拉列表的选择控件,通过单击控件上的箭头可显示或隐藏下拉列表。

2、页面布局指的是对子控件的大小、位置的控制。常见的有两种方式。一种是根据坐标、尺寸进行布局。缺点是当页面发生尺寸变化时,页面上的内容会乱掉。第二种是基本布局:有 StackPanel、Grid、DockPanel 几种基本布局容器。放在布局容器中的控件按照布局容器的特点进行布局。

(1)、StackPanel 是把子控件横向或纵向排列。可用 Orientation 属性设定排列的方向:Horizontal(水平方向)、Vertical(纵向,其为默认值)。

    <Grid>
        <StackPanel>
            <Button Height="40" Content="Button_01"></Button>
            <Button Height="40" Content="Button_02"></Button>
            <TextBox Height="40" Text="hello"></TextBox>
            <TextBlock Height="40" Text="this"></TextBlock>
        </StackPanel>
    </Grid>
//StackPanel之间的内容默认由上到下纵向排列。可用如下方式设置其间的内容横向排列
        <StackPanel Orientation="Horizontal">
            <Button Height="40" Content="Button_01"></Button>
            <Button Height="40" Content="Button_02"></Button>
        </StackPanel>

(2)、Grid 布局把页面分成行和列来进行显示:

其列的划分方式为:Grid.ColumnDefinitions;行的划分方式为:Grid.RowDefinitions

// 下面是通过Grid将页面划分为2行3列    
   <Grid>
        <Grid.ColumnDefinitions> //列的划分定义,应采用如下方式。如下划分了3列,默认是平分页面。
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions> //行的划分方式。如下划分了2行,默认是平分页面。
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
    </Grid>
// 也可以指定行和列高度或宽度。如
<ColumnDefinition Width="80"></ColumnDefinition>

   其默认的开始位置是第0行0列;当往划分好的Grid 页面添加控件时,若果不指定控件的位置,则其默认位置为0行0列。若需要指定控件的位置,方式如下:

// 在第2行,第3列的位置放置Button控件。
<Button Grid.Column="2" Grid.Row="1" Content="TheClick"></Button>

如果要一个控件占据几列或者几行,可以使用:Grid.ColumnSpan  或  Grid.RowSpan 。如下所示

// Button控件占据两行,其为向下递增。
<Button Grid.Column="1" Grid.Row="0" Content="TheClick" Grid.RowSpan="2"></Button>

[ 注意 ] :布局容器之间可以相互嵌套。如<Grid></Grid>内部可以嵌套<StackPanel></StackPanel>或者<Grid></Grid>

// 首先将整个界面划分一个2行3列的Grid
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
//再将第1行,第2列的Grid划分为四个Button控件。
        <StackPanel Grid.Column="1">
            <Button Height="50"/>
            <Button Height="50"/>
            <Button Height="50"/>
            <Button Height="50"/>
        </StackPanel>
//再将第2行第1列Grid划分为一个2行4列的子Grid
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
        </Grid>
    </Grid>

(3)、DockPanel 一般用于把它的子元素靠左、靠右、靠上、靠下等四个方向来进行布局,通过DockPanel.Dock 来指定子控件的位置。默认时指的时左上角的位置。常常用于菜单的布局。

注意:DockPanel内的子控件一般是在上面已经占据的位置后,所剩下的位置进行的。采取先到先得的优先级。

    <Grid>
        <DockPanel>
            <Menu DockPanel.Dock="Top"> //DockPanel.Dock="Top"设置菜单栏靠顶。
               // 菜单项及子菜单的内容
                <MenuItem Header="文件">
                    <MenuItem Header="新建"></MenuItem>
                    <MenuItem Header="打开"></MenuItem>
                    <MenuItem Header="起始页"></MenuItem>
                </MenuItem>
                <MenuItem Header="编辑">
                    <MenuItem Header="转到"></MenuItem>
                    <MenuItem Header="查找"></MenuItem>
                </MenuItem>
                <MenuItem Header="视图"></MenuItem>
            </Menu>
        //在剩下的位置上设置控件靠底
            <TextBlock DockPanel.Dock="Bottom" Height="80" >hello</TextBlock>
            <TextBox DockPanel.Dock="Bottom" Height="80">yes</TextBox>
            <TextBox></TextBox>
        </DockPanel>
    </Grid>

 效果图如下;

    

 


二、属性:指控件在窗口的样式(如:尺寸,外观)。每一个控件的每一种属性只能设置一次,设置多次会出现冲突。

  • Name:相当于其变量名,一般用于调用的前缀。(如:Name="t1",则后续调用时可以为:t1.Text 表示文本的值、t1.value)
  • Content:为 Button 控件在界面上的名称。
  • Text:为 TextBlock、TextBox 控件在界面上显示的名称。
  • Visibility:可见性。其值是枚举类型:Visible 表示可见;Collapsed 表示不可见。所有的控件都有Visibility属性。
    private void isaclick(object sender, RoutedEventArgs e)
            {
                //点击一个button,让另一个控件隐藏。atast为另一个控件的 Name
                atast.Visibility = System.Windows.Visibility.Collapsed;
            }

     

  • Background:为背景色。如设置Button控件的背景色为红色:Background="Red"
  • Foreground:前景颜色。如:Foreground="Purple"
  • FontSize:字体(有的控件有,有的则没有)。
  • IsReadOnly:只读,不能修改。如:IsReadOnly = "True"
  • TextWrapping:使文本框换行,用于当内容很多时,可以全部显示出来。如让TextBox文本框中:TextWrapping = "Wrap"
  • MaxLength:文本框最大输入长度。如让TextBox的最大文本长度为10个字符:MaxLength="10"
  • Password:为PasswordBox控件的读取密码的属性。如:Password="12345"
  • GroupName:为RadioButton控件的组名。用于当有多个组时,每个组只能选一个的情况下。如:GroupName="01"
  • Source:指路径。一般在Image控件中使用。
  • VerticalAlignment:控制垂直对其的方式。如 VerticalAlignment="Center" 控制文本在竖直方向上居中显示。
  • Margin:指控件距四周的边距。如对于TextBox控件,可以用来指定其距离指定位置四周的边距。使其显示更加美观。
  • Header:用来显示菜单项 MenuItem 上的文字。
  • ResizeMode:控制窗口的尺寸能否通过拖拉来修改。
  • WindowStartupLocation:控制打开子窗口的位置。如屏幕正中央。

 


三、事件:指的的是当控件发生某种触发的时候(如点击一个按钮:Click),会执行一段制定的代码。(回调指系统来调用)

  • Loaded:加载
  • Click:点击
  • MouseEnter:鼠标移入

四、方法:指当调用方法时,会做什么事情,执行一个动作。一般是在C#中来进行体现。


五、程序的参数:

1、所有的类都继承自 object 类。object 类为所有类的父类。

//类继承的写法
class  子类:父类

//class关键字可以被private、public、等词修饰。
//可以用父类变量指向子类对象,不能把子类变量指向父类对象。变量类型和对象类型不一样

2、sender

private void Click_b01(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("This is just a test for Button01");
        }
//参数sender指被点击的控件,

3、

  • 可空(null)数据类型:引用类型。如:自定义类、string、大部分类
  • 不可空:值类型。如:int、boolean、decimal、DateTime等。

4、两个类之间的内容调用是通过属性来进行的,如

  • OpenFileDialog 属性是要包含 using Microsoft.Win32; 命名空间。
  • Filter:过滤器

六、用法:

1、为窗口界面添加背景:首先右键项目,选择“添加">>"现有项",将要作为背景的图片添加到该项目下。

  

 然后再在XAML文件的 <Grid></Grid>之间添加如下代码:

<Grid.Background>
    <ImageBrush ImageSource="watermark.png"/>
</Grid.Background>

2、Button 控件的用法。常见写法有三种,如下所示:

<Button Height="40" Content="Button_01"></Button> //用于简单的情况
<Button Height="40" Content="Button_02"/> //用于简单的情况
// 用于复杂的情况
<Button>
    <Button.Content>Button_03</Button.Content>
    <Button.Content>
            <Image Source="01.png" />  //Button的Content不仅仅可以是文字,还可以是图片。
    <Button.Height>70</Button.Height>
</Button>

//Button的每个属性只能设置一个内容,如Content只能设置一个值。如果一个Button.Content即想显示照片,又想显示文字时,可以通过StackPanel来对其进行封装进行。
    <Grid>
        <StackPanel >
            <Button Height="40" Content="Button_01"></Button>
            <Button Height="40" Content="Button_02"/>
            <Button>
                <Button.Content>//通过StackPanel来实现同时显示多个内容。
                    <StackPanel>
                        <Image Source="001.jpg" Height="80"/>
                        <TextBox>Hello</TextBox>
                    </StackPanel>
                </Button.Content>
                <Button.Height>170</Button.Height>
            </Button>
        </StackPanel>
    </Grid>

3、当点击不同的Button时,要做出同样的反应。即让两个控件指向同一个动作。此时,只要让其事件名相同即可(如让button01和button02的事件Click名都相同即可)。

   

4、为一个button 添加事件后,其对应的动作:为窗口添加多个 RadioButton 控件后,当想点击其中一个的时候会出现欢迎的窗口,其内容如下:

(1)、窗口界面如下

  

(2)、对应XAML代码如下

<RadioButton Name="sport01" Click="Tjq_click" Content="太极拳001;" HorizontalAlignment="Left" Margin="75,55,0,0" VerticalAlignment="Top"/>
<RadioButton Content="健身运动" HorizontalAlignment="Left" Margin="75,98,0,0" VerticalAlignment="Top"/>
<RadioButton Content="其他" HorizontalAlignment="Left" Margin="75,149,0,0" VerticalAlignment="Top"/>

当点击”太极拳001“选项时,会出现welcome页面。

(3)、C#代码如下

private void Tjq_click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("welcome");
            sport01.Visibility = System.Windows.Visibility.Collapsed;
        }
//Tjq_click为函数名,其在XAML中对应的位置是:Click="Tjq_click"。所以事件的对应的函数名为事件的值。
//而sport01则是该控件Button的Name值,其对应的是Button的变化,在该处为隐藏的特性。

5、创建一个3行2列的登陆界面,让“登陆”、“取消”按钮(控件)距离边界10px的距离。其XAML代码如下所示

   <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <TextBlock Name="UsernameBlock" Text="用户名" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
        <TextBlock Name="PwdBlock" Text="密码" Grid.Column="0" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center" ></TextBlock>
        <TextBox Name="UserBox" Margin="10,10,10,10" Grid.Column="1" Grid.Row="0"/>
        <PasswordBox Name="InputPwd" Margin="10,10,10,10" Grid.Column="1" Grid.Row="1"  />
        <Button Name="Surebt" Margin="10" Grid.Column="0" Grid.Row="2" Content="登陆"/>
        <Button Name="Abortbt" Margin="10" Grid.Column="1" Grid.Row="2" Content="取消"/>
    </Grid>
// Margin 设定控件距离边界的距离。

6、用代码来产生控件并进行赋值:

(1)、XAML代码

    <Grid> //为StackPanel控件添加事件 Loaded和MouseEnter
        <StackPanel Name="sp1" Loaded="Sp1_Loaded" MouseEnter="Sp1_MouseEnter"></StackPanel>
    </Grid>

(2)、对应C#代码

// 当生成窗口时自动加载如下内容
        private void Sp1_Loaded(object sender, RoutedEventArgs e)
        {
            Button btn = new Button();//产生一个Button控件,与拖动的效果相同
            btn.Content = "a test";//该控件的内容为:a test
            sp1.Children.Add(btn); //将该控件加入到其孩子中(即StackPanel的子控件中,成为StackPanel的一部分)。
        }
// 当鼠标移到窗口时,会增加一行 a new controls
        private void Sp1_MouseEnter(object sender, MouseEventArgs e)
        {
            Button btn1 = new Button();
            btn1.Content = "a new controls";
            sp1.Children.Add(btn1);//注意此处的调用前缀为StackPanel的Name="sp1"的值sp1.
        }

7、生成一个10X10的Grid 

(1)、XAML代码如下

    <Grid>
        <Grid Name="gridNe" Loaded="GridNe_Loaded">
            
        </Grid>
    </Grid>

(2)、C#代码如下

        private void GridNe_Loaded(object sender, RoutedEventArgs e)
        {
            //当加载窗口时动态创建10行10列的Grid
            for(int i = 0; i < 10; i++)
            {
                //创建一个动态变量colDef,表示列变量
                ColumnDefinition colDef = new ColumnDefinition();
                //动态添加列,将上面声明的列变量添加到Grid 的列定义中来。
                gridNe.ColumnDefinitions.Add(colDef);

                //new一个行定义的变量
                RowDefinition rowDef = new RowDefinition();
                //将rowDef列变量动态的增添
                gridNe.RowDefinitions.Add(rowDef);
            }
            //将生成的100个Button控件分别放置在以上所生成的100个Grid之中。
            for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    //创建Button控件
                    Button btn = new Button();
                    btn.Content = i + "," + j;//Button控件所显示的内容
                    //通过代码修改控件的属性
                    Grid.SetRow(btn, i);//Grid.SetRow()是将哪个控件的什么属性设置为Row的值。
                    Grid.SetColumn(btn, j);//Grid.SetColumn将btn控件的j的值设置为Column的值。
                    gridNe.Children.Add(btn);

                }
            }
        }

8、菜单Menu

(1)、WPF中的Menu可以显示在任意位置,但是一般使用布局显示到页面顶部。如下显示一个菜单及其子菜单。

    <Grid>
        <Menu Height="20" Width="40" VerticalAlignment="Top" HorizontalAlignment="Left" > //菜单项的位置及对其方式
            <MenuItem Header="文件"> //主菜单名
                <MenuItem Header="打开"></MenuItem> //子菜单名
                <MenuItem Header="退出"></MenuItem> //子菜单名
            </MenuItem>
        </Menu>
    </Grid>
//多个子菜单可以通过<MenuItem></MenuItem> 来不断的嵌套实现。

   效果如下:

    

9、在窗口中显示菜单栏(Menu)和工具栏(Toolbar),其中工具栏按键以图标的形式显示。XAML代码如下

    <Grid>
        <DockPanel>
         // 显示菜单栏
            <Menu DockPanel.Dock="Top">
                <MenuItem Header="打开"></MenuItem>
                <MenuItem Header="编辑"></MenuItem>
            </Menu>
         // 显示工具栏,其中工具栏中Button按钮的内容以图标的形式展示
            <ToolBar DockPanel.Dock="Top" Height="30">
                <Button >
                    <Button.Content>
                        <Image Source="004.jpg"></Image>
                    </Button.Content>
                </Button>
                <Button>
                    <Button.Content>
                        <Image Source="005.jpg"></Image>
                    </Button.Content>
                </Button>
                <TextBlock Text="自动保存" VerticalAlignment="Center"></TextBlock>
                </ToolBar>
            <TextBox DockPanel.Dock="Bottom"></TextBox>
        </DockPanel>
    </Grid>

  效果图如下所示:

  

10、多窗口显示。当点击上图的铅笔按键时,会弹出新窗口。

(1)、首先右键项目名>>>点击添加>>>选择窗口。如下图

  

(2)、取新窗口的名称为 AboutWindow1 ,具体内容如下

// MainWindow.xaml 即主窗口的文件如下
    <Grid>
        <DockPanel>
            <Menu DockPanel.Dock="Top">
                <MenuItem Header="打开"></MenuItem>
                <MenuItem Header="编辑"></MenuItem>
            </Menu>
            <ToolBar DockPanel.Dock="Top" Height="30">
                <Button Name="Savebtn" Click="Savebtn_Click" > //在要触发的按钮上建立事件
                    <Button.Content>
                        <Image Source="004.jpg"></Image>
                    </Button.Content>
                </Button>
                <Button>
                    <Button.Content>
                        <Image Source="005.jpg"></Image>
                    </Button.Content>
                </Button>
                <TextBlock Text="自动保存" VerticalAlignment="Center"></TextBlock>
                </ToolBar>
            <TextBox DockPanel.Dock="Bottom"></TextBox>
        </DockPanel>
    </Grid>
// AboutWindow1.xaml 即子窗口的文件内容如下
    <Grid>
        <TextBox Name="Showtbox" HorizontalAlignment="Left" Height="40" Margin="210,112,0,0" TextWrapping="Wrap" Text="The test for the Button Key" VerticalAlignment="Top" Width="120" RenderTransformOrigin="0.499,0.561"/>

    </Grid>
// MainWindow.xaml.cs 文件添加的内容如下。
        private void Savebtn_Click(object sender, RoutedEventArgs e)
        {
            //AboutWindow1也是一个继承于Windos类的子类,在此先创建一个AboutWindow1类的实例。
            AboutWindow1 abwind = new AboutWindow1();
            //再用此类的实例来调用ShowDialog()函数,从而显示出该窗口,即为子窗口。
            abwind.ShowDialog();
        }
    }
// AboutWindow1.xaml.cs 的内容不变。

 效果如下:

   

这种方式是一启动就是 MainWindow ,而 AboutWindow1 的启动只能是通过点击 MainWindow 上的相应按钮,才可以。如果想修改成直接一开始启动就是 AboutWindow1的具体方法如下:

  首先点击 App.xaml ,如下所示:

  

修改其中的 StartupUri 为要启动的窗口路径即可:

<Application x:Class="_04.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:_04"
             StartupUri="MainWindow.xaml"> //修改该处即可
    <Application.Resources>
         
    </Application.Resources>
</Application>

注意:固定AboutWindow1窗口的大小时修改该窗口的属性ResizeMode即可如下:

<Window x:Class="_04.AboutWindow1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_04"
        mc:Ignorable="d"
        WindowState="Maximized" //控制平面占满全屏。
        Title="AboutWindow1" Height="450" Width="800" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
</Window>

 


参考资料:

[1]  我的第一个 WPF 桌面应用程序

[2]  30分钟学会XAML

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值