当前位置: 首页 > article >正文

WPF_1

剖析最简单的WPF程序

什么是项目模板

首先新建一个WPF项目模板

直接运行:

最简单的WPF程序

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

现在来看下MainWindow.xaml中代码

<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的两部分

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形式赋值

是最方便的形式

Height="450" Width="800"

缺陷在于无法赋复杂的值

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

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

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

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

然后再xaml文件中操作:

 xmlns:local="clr-namespace:HappyWPF"//引入该程序集的名称空间,这样才能用human类

<Windows.Resource>
<local:Human x:Key="human" Name="Tim"/>
</Windows.Resource>
//将human以window的一个资源的形式声明出来,
//每个wpf程序以一个资源字典的形式去维护一系列资源

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

<Button Content="Show!" Width="120" Height="30" Click="Button_Click" />

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

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按钮中加一个绿色的小方块

小方块代码如下:

<Rectangle Width="20" Height="20" Stroke="DarkGreen"Fill="LawnGreen">

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

  <Button Width="120" Height="30">
      <Button.Content>
          <Rectangle Width="20" Height="20" Stroke="DarkGreen"Fill="LawnGreen"/>
      </Button.Content>
  </Button>

3、以标签扩展赋值

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

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

<TextBlock Height="24"Width="123"Background="LightBlue" Text="Hello"/>

 现在以标签扩展赋值:

//引入字符串名称空间
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}"/>


http://www.kler.cn/a/422082.html

相关文章:

  • 将word里自带公式编辑器编辑的公式转换成用mathtype编辑的格式
  • 【后端面试总结】缓存策略选择
  • go并发设计模式runner模式
  • jvm-46-jvm Thread Dump 线程的信息获取+可视分析化工具 FastThread
  • 【MyBatis】验证多级缓存及 Cache Aside 模式的应用
  • 【测试工具JMeter篇】JMeter性能测试入门级教程(七):JMeter断言
  • Scala身份证号if else if else查询省份
  • 每日一题:golang并发 mutex、context
  • 【论文阅读】Adversarial gradient-based meta learning with metric-based test
  • 什么是 Socket?
  • 005 MATLAB符号微积分
  • 数仓项目常见问题解答
  • Narya.ai正在寻找iOS工程师!#Mixlab内推
  • linux下环境变量的使用
  • 基于Java Springboot时间管理微信小程序
  • NLP 相关知识的构成
  • MR30分布式 IO 模块助力印刷设备,开启收益新篇
  • python脚本:Word文档批量转PDF格式
  • el-input输入校验,只允许输入数字或者带一个小数点的数字。
  • Linux环境部署RocketMQ单节点以及双主双从集群环境
  • 算法笔记:力扣146.LRU缓存
  • ubuntu无线网络共享到有线
  • 在 Windows Server 2022 Datacenter 上配置 MySQL 8.0 的主从复制
  • vscode切换anaconda虚拟环境解释器不成功
  • 无人机的计算机仿真模拟控制
  • 【测试工具JMeter篇】JMeter性能测试入门级教程(六):JMeter中实现参数化的几种方式