WPF探究【一】

news2024/10/3 4:44:01

文章目录

  • WPF的概述:
  • 控件分类
  • XAML
    • 对象元素语法
    • XAML根元素
    • WPF和XAML命名空间声明
  • 控件
    • Lablel
      • 示例
    • 继承关系
    • TextBlock
    • button
    • Border

WPF的概述:

  • WindowsPresentationFoundation(简称WPF)
  • WPF的核心是一个与分辩率无关且基于实量的呈现引擎,自在充分利用现代图形硬件。WPF通过一套完善的应用程序开发功能对该核心进行了扩展,这些功能包括可扩展应用程序标记语言(XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。WPF属于.NET,因此可以生成整合.NETAPI其他元素的应用程序。
  • 简介:
    • Windows用户界面框架统一的编程模型、语言和框架,做到了界面设计与后端升发分离。
  • 特点:
    1. 呈现效果不受分解率的影响。
    2. 基于Directx3d技术,可以做出炫酷的界面。
    3. 提供UI框架,集成了失量图形、流动文字支持、3d视觉效果和控件模型框架。
    4. UI与业务逻辑彻底分离。
    5. UI-XAML描述(底层wpf引擎是把元素解释成对应的对象。
    6. 基于数据驱动、数据是核心。

控件分类

  • System.Windows.Controls
Label(表示控件的文本标签,并提供访问密钥支持。)TextBox(显示或编辑无格式文本)TextBlock(一个轻型控件用于显示少量流内容)
Border(边框控件,作用:在另一个元素四周绘制边框和/或背景)Button(按钮控件)Calendar(日历控件)
CheckBox(选择框)ComboBox(下拉框)Image(图片控件)
Menu(菜单)ContextMenu(内容菜单)RadioButton(表示可由用户选择但不能清除的按钮代码能清除)
DataGrid(数据网格-Table)ListBox(包含可选项列表)Listview(表示用于显示数据项列表的控件

XAML

  • XML是一种声明性标记语言应用于.NET Core编程模型时,XAML简化了为.NET Core应用创建UI的过程。
  • XAML文件是通常具有.xaml扩展名的XML文件。
  • 可通过任何XML编码对文件进行编码,但通常以UTF-8编码。
<StackPanel>
	<Button Content="Click Me">
</StackPanel>

对象元素语法

  • 对象元素语法是XAML标记语法,它通过声明XML元素来实例化CLR类或结构。此语法类似于其他标记语言(如HTML)的元素语法
  • 单标签格式。<markName/>
  • 双标签格式。<markName>...</markName>

XAML根元素

  • 一个XAML文件只能有一个根元素,这样才能同时作为格式正确的XML文件和有效的XAML文件。对于典型WPF方案,可使用在WPF应用模型中具有突出意义的根元素(例如,页面的Window或Page)
  • 在根标签下面有且只能有一个二级标签。在二级标签里面我们可以写多个三级四级标签。
<Window >
    <Grid >
    
    </Grid>
</Window>

WPF和XAML命名空间声明

  • 在许多XAML文件的根标记中的命名空间声明内,通常可看到两个XML命名空间声明
  • 第一个声明默认映射整个WPF客户端/框架XAML命名空间xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation
    第二个声明映射单独的XAML命名空间,(通常)将其映射到x:前缀xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml
  • 这些声明之间的关系是x:前缀映射支持作为xaml语言定义一部分的内部函数,而WPF是一种将xaml用作语言的实现,并为xaml定义了其对象的词汇。
<Window x:Class="wpf1.Controls.WindowLabel"
        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:wpf1.Controls"
        mc:Ignorable="d"
        Title="WindowLabel" Height="450" Width="800">
    <Grid >
    </Grid>
</Window>

控件

Lablel

命名空间:System.Windows.Controls
程序集:PresentationFramework.dll
表示控件的文本标签,并提供访问密钥支持

[System.Windows.Localizability(System.Windows.LocalizationCategory.Label)]
public classLabel:System.Windous.Controls.ContentControl

继承Object →DispatcherObject →DependencyObject →Visual→UIElement →FrameworkElement→Control→ContentControl→Label
属性LocalizabilityAttribute

示例

以下示例演示如何创建一个Label使用绑定来设置目标

<Window x:Class="wpf1.Controls.WindowLabel"
        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:wpf1.Controls"
        mc:Ignorable="d"
        Title="WindowLabel" Height="450" Width="800">
    <Grid RenderTransformOrigin="0.5,0.5" Margin="1,-2,481,293">
    	<!--水平方向排列设置HorizontalAlignment-->
        <!--垂直方向排列设置VerticalAlignment-->
        <!--外边距,使用Margin四个数字对应方向为左上右下,一个数字代表所有外边距-->
        <Label Width="100" Height="30" Content="我是一个Label控件" 
               HorizontalAlignment="Center" 
               VerticalAlignment="Center"
               Margin="0,10,10,0" 
               FontSize="14" Foreground="Blue">
        </Label>
    </Grid>
</Window>

继承关系

在这里插入图片描述

  • 对象:System.Windows.FrameworkElement
  • 属性
属性名对象类型作用
Widthdouble获取或设置元素的宽度。
Heightdouble获取或设置元素的高度。
Actualwidthdouble获取此元素的呈现的宽度
ActualHeightdouble获取此元素的呈现的高度
Namestring获取或设置元素的标识名称。该名称提供引用,以便代码隐藏(如事件处理程序代码)可以引用标记元素(在XAML处理器的处理过程中构造该元素之后)。
StyleStyle获取或设置此元素呈现时所使用的样式
MarginThickness获取或设置元素的外边距。
HorizontalAlianmentHorizontalAlignment获取或设置在父元素(如Panel或项控件)中组合此元素时所应用的水平对齐特征。【水平对齐设置,它是一个枚举值。)
FocusVisualstyleStyle获取或设置一个属性,该属性允许自定义此元素在捕获到键盘焦点时要应用于此元素的外观、效果或其他样式特征
FlowDirectionFlowDirection获取或设置方向,文本和其他用户界面(U1元素在任何控制其布局的父元素中都按此方向流动。
objectDataContext获取或设置元素参与数据绑定时的数据上下文。
  • 方法
方法名参数作用
BningintoView尝试将此元素放入视图,它包含在任何可滚动区域内。
BringintoView(Rect targetRectangle)指定也放入视图的元素的大小。尝试将放入视图,它包含在任何可滚动区域内的此元素提供的区域大小
FindName(string name)所请求元素的名称(name)查找具有提供的标识符名的元素
FindResource(object resourceKey)所请求的资源键标(resourcekey)搜索具有指定键的资源并在引发异常,如果找不到所请求的资源。
  • 事件
事件名称作用
Loaded当对元素进行布局、呈现,且可将其用于交互时发生。
KeyDown当焦点在该元素上时按下某个键后发生
GotFocus在此元素获得逻辑焦点时发生
MouseDown
MouseMove在鼠标指针位于此元素上并且移动鼠标指针时发生。
Click控件的点击事件

TextBlock

<Window x:Class="wpf1.WindowTextBlock"
        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:wpf1"
        mc:Ignorable="d"
        Title="WindowTextBlock" Height="450" Width="800">
    <Grid>
        <!--text设置的内容,会被标签内的内容覆盖
            如果想进行换行操作,可以在TextBlock双标签里面加上LinkBreak
        -->
        <TextBlock Text="我是Text Block" FontSize="20" FontWeight="Light" Foreground="Red">
            我是文本一<LineBreak/>
            我是文本二<Hyperlink/>
            我是文本三<LineBreak/>
        </TextBlock>
    </Grid>
</Window>

在这里插入图片描述

button

<Window x:Class="wpf1.WindowButtton"
        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:wpf1"
        mc:Ignorable="d"
        Title="WindowButton" Height="450" Width="800">
    <Grid>
        <!--按f12进入事件处理程序-->
        <Button Width="100" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" 
                Content="我是按钮1" Margin="20,20,0,0" Background="Teal"
                BorderBrush="Transparent" Foreground="White" Click="Button_Click_1"
                MouseMove="Button_MouseMove"></Button>
        <Button Width="100" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" 
                Content="我是按钮1" Margin="160,20,0,0" Background="Teal"
                BorderBrush="Transparent" Foreground="White" Click="Button_Click_2"
                ></Button>
        <Button Background="Teal" Width="150" Height="30" Margin="300,20,0,0" 
                HorizontalAlignment="Left" VerticalAlignment="Top"
                Content="右击检查快捷菜单" Foreground="White">
            <Button.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="子菜单1">快捷菜单项1</MenuItem>
                    <MenuItem Header="子菜单2">快捷菜单项2</MenuItem>
                </ContextMenu>
            </Button.ContextMenu>
        </Button>
    </Grid>
</Window>


namespace wpf1
{
    /// <summary>
    /// WindowButtton.xaml 的交互逻辑
    /// </summary>
    public partial class WindowButtton : Window
    {
        public WindowButtton()
        {
            InitializeComponent();
        }

        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("按钮被点击了");
        }

        private void Button_MouseMove(object sender, MouseEventArgs e)
        {
            MessageBox.Show("鼠标移到了按钮上!");
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {

        }
    }
}

在这里插入图片描述

Border

  • System.Windows.Controls.Border继承自Decorator类

  • 在另一个元素四周绘制边框/背景。

  • 若要显示多个子元素只能有一个孩子。,需要在父Border元素中放置一个附加Panel元素。然后,Border可以将子元素放置在该Panel元素中。由grid是继承Panel,所以在Border中添加Grid即可
    在这里插入图片描述

  • 如果要在内容周围显示边框则必须将元素放置在父Border元素中。

  • CornerRadius获取或设置一个值,该值表示将border的角倒圆的程度。

<Window x:Class="wpf1.WindowBorder"
        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:wpf1"
        mc:Ignorable="d"
        Title="WindowBorder" Height="450" Width="800">
    <Grid>
        <!--
            BorderThickness边框宽度默认为0
            直接设置一个参数代表的是四周
            四个参数 左、上、右、下
            设置边框颜色加上边框宽度,才能准确显示边框的效果。 
            如果需要设置角的弧度。 需要使用cornerRadius属性。 
        -->
        <Border Background="LightBlue" 
                BorderBrush="red" BorderThickness="2" Margin="300,186,240,130">
            <Grid Margin="0,0,0,19">
                <Label
                   Foreground="Blue" FontSize="20" FontFamily="楷体" Margin="86,27,0,0">
                    Labler内容1
                </Label>
                <Label 
                   Foreground="Blue" FontSize="20" FontFamily="楷体" Margin="0,1,38,-1">
                    Labler内容2
                </Label>
            </Grid>
        </Border>
        <Border BorderBrush="Black" BorderThickness="2" Margin="0,186,595,169"
                Background="LightBlue" CornerRadius="50">
            <Button Background="Transparent" FontSize="20" Content="测试按钮" Foreground="BlueViolet"
                    Click="Button_Click" BorderBrush="Transparent"></Button>
        </Border>
    </Grid>
</Window>

namespace wpf1
{
    /// <summary>
    /// WindowBorder.xaml 的交互逻辑
    /// </summary>
    public partial class WindowBorder : Window
    {
        public WindowBorder()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("成功测试按钮");
        }
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深入理解Kotlin协程】使用Job控制协程的生命周期

Job 是协程上下文CoroutineContext的实现之一&#xff0c;通过它我们可以对协程的生命周期进行一些控制操作。Job 是协程的句柄。使用 launch 或 async 创建的每个协程都会返回一个 Job 实例对象&#xff0c;该实例是相应协程的唯一标识并管理其生命周期。还可以将 Job 传递给 …

数据结构与算法(四) 广度优先搜索

本篇文章继续来学习广度优先搜索算法&#xff08;Broad-First-Search&#xff0c;BFS&#xff09; 1、本质 广度优先搜索本质上还是遍历整个搜索空间&#xff0c;找到给定问题的解 实际上也是一种暴力搜索算法&#xff0c;不过其中的实现细节和优化细节还是值得探讨的 与深度…

基于PHP+MySQL的大学生交友社交网站

近年来,大学生的数量在逐步的增加,为了能够让这些大学生有一个更好的交友环境,需要创建一个基于大学生的社交交友网站。这样可以拉近彼此大学生之间的感情,让他们可以更好的进行学习和交流。 PHP大学生交友社交网站通过PHP&#xff1a;MySQL进行开发,分为前台和后台两部分,通过…

线程的状态

Java中线程的状态是通过枚举类型Thread.State表示的 &#xff0c;通过打印这些枚举类型&#xff0c;就可以知道java中线程的状态有哪些 public class ThreadState {public static void main(String[] args) {for (Thread.State state : Thread.State.values()) {System.out.pr…

进销存管理系统是什么?有哪些功能?

对于2022年刚开始&#xff0c;但是可以的确的是禽流感在短时期内是不可能返回他们&#xff0c;作为虚拟店面批发商想勇往直前中&#xff0c;就必须要亲吻网络&#xff0c;把销售业务从实体店搬至线上去。 想突破现状&#xff0c;化解虚拟店面批发民营企业的存活问题&#xff0…

ES初使用记录——写入与查询数据

本周接到一个任务&#xff1a;定时统计订单表中的数据&#xff0c;将异常订单挑出来&#xff0c;放入ES中供统计页面从总数点击跳转过去进行列表展示。 一、配置ES 配置maven&#xff0c;注入template Resource private ElasticsearchTemplate elasticsearchTemplate; 二、…

一、OBS概述

1. 概述 obs官网git源码编译 2. 软件能力 输入&#xff1a;文本、图片、窗口、音视频及摄像头等 处理&#xff1a;视频及图片滤镜、音频混音等 输出&#xff1a;rtmp推流、本地录制(mp4)、音视频裸数据(pcm/yuv/rgb)等 3. 模块 a. core核心模块 libobs 加载、管理各个功能…

Ansys Zemax | 大功率激光系统的STOP分析2:如何进行光机械设计准备

大功率激光器广泛用于各种领域当中&#xff0c;例如激光切割、焊接、钻孔等应用中。由于镜头材料的体吸收或表面膜层带来的吸收效应&#xff0c;将导致在光学系统中由于激光能量吸收所产生的影响也显而易见&#xff0c;大功率激光器系统带来的激光能量加热会降低此类光学系统的…

性能测试面试题总结(答案全)

目录 1.什么是负载测试&#xff1f;什么是性能测试&#xff1f; 2.性能测试包含了哪些测试&#xff08;至少举出3种&#xff09; 3.简述性能测试的步骤 4.什么时候可以开始执行性能测试&#xff1f; 5.你如何在负载测试模式下执行功能测试&#xff1f; 6.响应时间和吞吐量…

时序数据库 InfluxDB

一、介绍 InfluxDB 是一个时间序列数据库&#xff0c;GO 编写的,旨在处理高写入和查询负载。InfluxDB 旨在用作涉及大量时间戳数据的任何用例的后备存储&#xff0c;包括 DevOps 监控、应用程序指标、物联网传感器数据和实时分析。 特点&#xff1a; 专门为时间序列数据编写的…

格式工厂安装与使用教程

格式工厂支持各种类型视频、音频、图片、word转pdf等多种格式的免费转换&#xff0c;是一款非常优秀的良心软件。 在电脑浏览器中打开下载地址http://www.pcgeshi.com/index.html , 单击"立即下载"按钮即可。 打开下载的文件&#xff0c;等待安装即可。&#xff08…

标记肽Bz-Pro-Phe-Arg-pNA、59188-28-2

血浆激肽释放酶&#xff0c;cruppain和胰蛋白酶的显色底物。编号: 140214 中文名称: 标记肽Bz-PFR-对硝基苯胺 英文名: Bz-Pro-Phe-Arg-pNA CAS号: 59188-28-2 单字母: Bz-PFR-pNA 三字母: Benzoyl-Pro-Phe-Arg-pNA 氨基酸个数: 3 分子式: C33H38O6N8 平均分子量: 642.7 精确分…

python 多线程编程(线程同步和守护线程)

守护线程&#xff1a; 随着主线程的终止而终止&#xff0c;不管当前主线程下有多少子线程没有执行完毕&#xff0c;都会终止。 线程同步&#xff1a; join所完成的工作就是线程同步&#xff0c;即主线程任务结束之后&#xff0c;进入阻塞状态&#xff0c;一直等待其他的子线程执…

深入了解tomcat线程池

1.概述 在正式进入Tomcat线程池之前&#xff0c;小伙伴们可以先回顾一下JDK中的线程池相关特性&#xff0c;对于JDK线程池的总结和源码的解析感兴趣的童鞋&#xff0c;也可参考博主的层层剖析线程池源码的这篇文章&#xff0c;文章主要讲述对线程池的生命周期&#xff0c;核心参…

Vue3 - 不再支持 IE11,到底为什么?

前言 咱们的 Vue2 目前仍然支持 IE11&#xff0c;但是到了 Vue3 这里&#xff0c;直接被抛弃了。 IE 浏览器可以说是早期前端开发的噩梦&#xff0c;现在还充斥的大量兼容 IE 浏览器的代码&#xff0c;你可以在网上看到很多类似的信息。 IE 浏览器下 float 布局错乱。IE 浏览器…

商务呈现之沟通管理-上

一、前言 课程目标及适用人群课程目标:商务/项目的目标达成,任务推动,良好的商务呈现 现实的困扰我们商务活动中是否有遇到以下情况: (1)需求老是变 理解不一致细节不清晰(2)CR很难谈 需求基线不清晰没有利用好"交换"(3)原地打转 事项推进缓慢几个月还在讨…

相似度系列-6:单维度方法:Evaluating Coherence in Dialogue Systems using Entailment

Evaluating Coherence in Dialogue Systems using Entailment coherence 英文中意味着连贯性、条理性。 这篇文章是面向对话应用的&#xff0c;更加关注于对话中上下位的连贯性。1. 直接转换为 NLI问题&#xff0c;premise-hypothesis问题。——2. 数据集是自己构造的。——数…

一文带你了解【抽象类和接口】

1. 抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是并不是所有类都是用来描绘对象的。如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。 举个简单的例子 上图中&#xff0c;三角形&#xff0…

构建一个商业智能 BI 分析平台,公司CIO应该重点关注什么?

企业级商业智能 BI 分析平台的构建是一个系统型的工程&#xff0c;涉及业务分析需求的把控、各类数据资源的整合清洗、数据仓库的架构设计、可视化分析报表逻辑设计、IT 部门与业务部门的工作边界划分与配合等等居多环节。 每一个环节的重要性都不容忽视&#xff0c;第一是业务…

(算法设计与分析)第三章动态规划-第二节:动态规划之背包类型问题

文章目录一&#xff1a;01背包问题&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;解题思路&#xff08;3&#xff09;完整代码二&#xff1a;分割等和子集&#xff08;01背包变形&#xff09;&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;解题思路…