WPF_1

剖析最简单的WPF程序

什么是项目模板

首先新建一个WPF项目模板

直接运行:

最简单的WPF程序

解决方案就对应着客户的一个需求,解决方案中可以含多个项目,每个项目编译后的结果是一个程序集Assembly。

现在来看下MainWindow.xaml中代码

cs 复制代码
<Window x:Class="WpfApp1.MainWindow"
        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:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">//window对象的属性,设置窗口的大小名字
    <Grid>

    </Grid>
</Window>

这是标签性语言,有个Window标签就会生成一个Window对象.

代码中xmlns,表示告诉编译器识别到后面的http字符串,就引入一系列类库(名称空间)到MainWindow.xaml中。起到简化引入类库的操作。

代码中有xmlns:x,xmlns:d等等,也就是冒号后跟一个字符。这其实就是它的名字。而第一个xmlns是无需有名字的。起名字的作用在于用某个xmlns的东西,就要先写它的名字。而不写名字的,系统知道就是来自第一个xmlns。

那么第一行代码<Window x:Class="WpfApp1.MainWindow",就知道Window是来自第一个xmlns,而x:Class表示Class是来自名为x的xmlns。这段代码的意思是:该.xaml文件编译结果会放在WpfApp1的MainWindow中。

而WpfApp1.MainWindow.cs代码中,partial也表明是部分类。结论是这两个文件是一个类MainWindow的两部分

cs 复制代码
namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

用户界面的树形结构

浅析用户界面的树形结构

用户界面是指用户与应用程序打交道的地方,WPF就是图型的用户界面,结构是树形的。而其他的如winform是平面结构的。

这是一个WPF的结构,像树一样,根结点然后叶节点,一层层下去的。由一个根 开枝盛叶。

在XAML中为对象属性赋值

首先xaml文件中代码是声明性语言编写,声明性意味着每个标签就对应着一个对象,对象存储数据有字段和属性,向外暴露数据是用属性。因为字段是没法检验数据的,只能单纯存储数据。

在xaml文件中,能以以下三种形式为对象赋值:

1、以Attribute=Value形式赋值

是最方便的形式

cs 复制代码
Height="450" Width="800"

缺陷在于无法赋复杂的值

cs 复制代码
 <Path Data="M 0,0 L 200,100 L 100,200 Z" Stroke="Black" Fill="Red"/>//最复杂形式

F12查看Data定义,发现它是Geometry类型属性,它是怎么映射过来的,可以与字符串对应 ?

在后台cs文件中新建一个human类

cs 复制代码
 public class Human //声明一个human类
 {
     public string Name { get; set; }
     public Human Child { get; set; }//如果一个human具有child对象,那么child也有自己的对象
 }

然后再xaml文件中操作:

cs 复制代码
 xmlns:local="clr-namespace:HappyWPF"//引入该程序集的名称空间,这样才能用human类
cs 复制代码
<Windows.Resource>
<local:Human x:Key="human" Name="Tim"/>
</Windows.Resource>
//将human以window的一个资源的形式声明出来,
//每个wpf程序以一个资源字典的形式去维护一系列资源

资源字典检索自己内容时,是靠索引的,上方x就是索引。

cs 复制代码
<Button Content="Show!" Width="120" Height="30" Click="Button_Click" />

Click是事件处理函数,右击进入事件处理函数当中。

cs 复制代码
private void Button_Click(object sender, RoutedEventArgs e)
{
    Human human=this.FindResource("human")as Human;//检索资源中内容,findresource是object型,as成Human型,不成功则为null
    if (human != null) {
        MessageBox.Show(human.Name);//检索当中内容,并且返回名字
    }

}

将字符串类型数据转换成其他数据类型原理:

2、以属性标签形式赋值

现在想在botton按钮中加一个绿色的小方块

小方块代码如下:

cs 复制代码
<Rectangle Width="20" Height="20" Stroke="DarkGreen"Fill="LawnGreen">

用第一种赋值方式是行不通的。采用属性标签

cs 复制代码
  <Button Width="120" Height="30">
      <Button.Content>
          <Rectangle Width="20" Height="20" Stroke="DarkGreen"Fill="LawnGreen"/>
      </Button.Content>
  </Button>
3、以标签扩展赋值

与第一种赋值方式很像,只不过它赋的东西带花括号。而且常用的就只有几个

先看下以第一种赋值形式赋值:

cs 复制代码
<TextBlock Height="24"Width="123"Background="LightBlue" Text="Hello"/>

现在以标签扩展赋值:

cs 复制代码
//引入字符串名称空间
xmlns:sys="clr-namespace:System;assembly=mscorlib"

//创建资源
 <Window.Resources>
     <sys:String x:Key="stringHello">
      Hello WPF!
     </sys:String>
 </Window.Resources>

//利用标签扩展使用资源
 <TextBlock Height="24"Width="123"Background="LightBlue" Text="{StaticResource ResourceKey=stringHello}"/>
相关推荐
界面开发小八哥21 小时前
界面组件DevExpress WPF中文教程:Grid - 如何显示和隐藏列?
wpf·界面控件·devexpress·ui开发·.net9
虚假程序设计1 天前
python用 PythonNet 从 Python 调用 WPF 类库 UI 用XAML
python·ui·wpf
落落落sss1 天前
MongoDB
数据库·windows·redis·mongodb·微服务·wpf
蒋劲豪1 天前
WPF项目暴露WebApi接口;WinForm项目暴露WebApi接口;C#项目暴露WebApi接口;
开发语言·c#·wpf
狮歌~资深攻城狮2 天前
未来已来:HBase的新功能与发展趋势展望
大数据·wpf·hbase
界面开发小八哥3 天前
界面控件DevExpress WPF v24.2新版亮点:支持.NET 9
.net·wpf·界面控件·devexpress·ui开发·用户界面
九鼎科技-Leo3 天前
WPF快速创建DeepSeek本地自己的客户端-基础思路版本
wpf
MasterNeverDown4 天前
WPF 中为 Grid 设置背景图片全解析
大数据·hadoop·wpf
苏克贝塔4 天前
WPF8-常用控件
wpf
积跬步---行千里5 天前
记录一次WPF程序进程挂起问题
mongodb·wpf