02-WPF_基础(一)

 1、基础

各模块类型

链接:如何:向 Viewbox 的内容应用 Stretch 属性 - WPF .NET Framework | Microsoft Learn

WPF基础以及事件绑定与数据绑定的情况,,在学习XAML,数据结构以及一个项目学习平台来练手,网络编程与数据通信,空压机啥的项目。;

1、项目文件简介

1.1、AppConfig

配置文件或者数据库,连接字符串,配置信息

2、App.xaml

设置应用程序起始文件,系统级资源。

StartupUri="MainWindow.xaml">   意思为指定起始文件   为MianWindow.xaml

<Application.Resources>   定义整个WPF应用程序的相关资源。

一个xaml至少包括两个命名空间:默认的;带x前缀的;

3、App.xaml.cs 

app.xaml的后台类文件

4、MainWindow.xaml

Window--WPF应用程序界面与xaml设计文件

5、Mainwindow。xaml.cs  

xaml窗口文件的后台代码文件

2、事件驱动与数据驱动

1、事件驱动

Winform主要的模式

委托绑定

2.1、数据驱动

WPF主要的模式:数据驱动与绑定

1、MainWindow:

此时需要定义:mainViewModel  _mianViewModel=newmainViewModel();   

this.DataContext=_mainViewModel;

    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        mainViewModel mainViewModel = new mainViewModel();
        public MainWindow()
        {
            InitializeComponent();
            // mainViewModel = new mainViewModel(this);   //  实例化类,建立连接
           
            this.DataContext= mainViewModel;    //  实例化绑定连接
        }
        

        private void Button_Click(object sender, RoutedEventArgs e)
        {
              业务逻辑
            //mainViewModel.Value = "10";
        }
    }

上述是数据绑定的格式

2、mainViewModel

这个定义待绑定的事件:继承INotifyPropertyChanged

public  event PropertyChangedEventHandler PropertyChanged

PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("具体需要执行的")

    public class mainViewModel:INotifyPropertyChanged
    {
        //  这种绑定方式

        //MainWindow _mainWindow;
        //public mainViewModel(MainWindow mainWindow)
        //{
        //    _mainWindow = mainWindow;
        //}
        
        public event PropertyChangedEventHandler PropertyChanged;  //  需要定义事件 event
        private string _value="ZHAOXI";
        public List<ValueModel> ValueList {  get; set; }=new List<ValueModel> { 
            new ValueModel{Value = "123", Name="AAA"},
            new ValueModel{Value="456", Name="BBB"}
        };
        public string Value 
        {
            get { return _value; }
            set
            {
                _value = value;
                //_mainwindow.tbName.text = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Value"));   //  此句放在属性改变后语句之后
                if (value == "10")
                {
                    ValueColor= Brushes.Red;
                    // this.txName.Foreground=Brushes.Red;
                }
                (this.ValueCommand as CommandBase).RaiseChanged();
            }
        }
        private Brush _valueColor = Brushes.Orange;
        public Brush ValueColor
        {
            get { return _valueColor; }
            set
            {
                _valueColor = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ValueColor"));
                
            }
        }
        private ICommand valueCommand;
        //  属性
        public ICommand ValueCommand { 
            get 
            { 
                if(valueCommand==null)
                {
                    valueCommand = new CommandBase() { DoAction = new Action<object>(ValueCommandAction), DoCanExecute = new Func<object, bool>(CanExecute) };
                    
                }
                return valueCommand; }
            set { 
                valueCommand = value; }
            
        }
        private void ValueCommandAction(object obj)
        {
            Value = "10";
        }
        public bool CanExecute(object obj)
        {
            return !string.IsNullOrEmpty(Value);

         }

    }

3、ICommand

事件点击问题

    internal class CommandBase : ICommand
    {
        public event EventHandler CanExecuteChanged;
        //public event EventHandler CanExecuteChanged  //  此为事件定义和声明 也可为public event EventHandler CanExexuteChanged;
        //{
        //    add
        //    {
        //        throw new NotImplementedException();
        //    }

        //    remove
        //    {
        //        throw new NotImplementedException();
        //    }
        //}

        public bool CanExecute(object parameter)
        {
            // 绑定了这个命令的按钮是否能用
            return DoCanExecute?.Invoke(parameter)==true;  ///  当等于true才触发
        }

        public void Execute(object parameter)  //  parameer  这个参数为commandparameter这个控件属性
        {
            // 执行逻辑
            DoAction?.Invoke(parameter);
        }
        public Action<object> DoAction { get; set; }
        public Func<object, bool> DoCanExecute { get; set; }
        public void RaiseChanged()
        {
            CanExecuteChanged?.Invoke(this,new EventArgs());
        }

    }

4、ValueModel

此模块是为了在右边显示

    public class ValueModel
    {
        public string Value { get; set; }
        public string Name { get; set; }
    }

上述是数据绑定的格式:

后续包括:布局控件、资源样式、模板、依赖属性、数据绑定、图形、事件与行为、动画等。

2.3、路径

路径:imgPic.Source=new BitmapImage(new Uri("image/12window.png",UriKind.Relative);

URI:(全称:Uniform Resource Identifier)统一资源标识符,它是一个字符串用来标示抽象或物理资源。

Web上可用的每种资源( HTML文档、图像、音频、视频片段、程序等)都由一个通用资源标识符(Uniform Resource Identifier, 简称”URI”)进行定位。

URI的格式也由三部分组成:

  1. 访问资源的命名机制。
  2. 存放资源的主机名。
  3. 资源自身的名称,由路径表示。

相对路径

.资源的生成操作为Resource

//  相对路径
//  命名控件引入using System.Windows.Media.Imaging;才可以直接用
imgPic.Source = new BitmapImage(new Uri("image/12window.png", UriKind.Relative)); //  Source  --- ImageSource

绝对路径:  

WPF支持两种授权:pack URI方案 application:///和  siteoforigin:///。

但是用siteoforingin替换application时候需要将图片资源的属性面板里的生成操作里将Resource改为内容才可以执行。注意两种方式路径的书写方式

//  授权  指定包含不见得程序包的类型,而路径, 则指定部件在程序包中的位置。

//  绝对路径Absolute
            // WPF支持两种授权: pack://application:,,,/和  pack://siteoforigin:,,,//。
            //  授权  指定包含不见得程序包的类型,而路径, 则指定部件在程序包中的位置。


            // imgPic.Source = new BitmapImage(new Uri("pack://application:,,,/image/12window.png", UriKind.Absolute));
            imgPic.Source=new BitmapImage(new Uri("pack://application:,,,/image/12window.png",UriKind.Absolute));
            //imgPic.Source = new BitmapImage(new Uri("pack://siteoforigin:,,,//image//12window.png", UriKind.Absolute));

第三种方式:

// 第三种方式
// 实际读取的是E:\SoftStudy\C#\C#\基础\01WPF基础\02控件_1\bin\Debug路径里的image/12window.png文件,与image里的生成操作方式无关


        private void Button_Click(object sender, RoutedEventArgs e)
        {
            imgPic.Source=new BitmapImage(new Uri(AppDomain.CurrentDomain.BaseDirectory+"image/12window.png",UriKind.Absolute));
        }

 3.2、XAML

定义:为定义用户界面创建的一种新的“可扩展的程序标记语言”。

需要命名空间:但是不太一样

下图像网址一样:

xaml命名空间格式:引用命名空间:xmlns:(前缀名)=“命名空间描述”;

自定义类或程序集映射语法:xmlns:(必选前缀)=“clr-namespace:(命名空间); assemly=(程序集名称)”;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML哆啦A梦

目录 写在前面 HTML简介 完整代码 代码分析 系列推荐 写在最后 写在前面 谁不想拥有一只可爱的叮当猫呢&#xff1f;本期小编给大家带来了一个萌萌的哆啦A梦。 HTML简介 HTML&#xff0c;即超文本标记语言&#xff0c;是构建网页的基础技术之一&#xff0c;它是一种标…

[初学者来练]用html+css+javascript个人博客作业需求

文章目录 项目概述项目需求页面设计主页文章列表页文章详情页用户交互额外功能&#xff08;可选&#xff09; 技术要求提交要求评分标准文件代码格式提示HTML 页面结构CSS 样式设计JavaScript 交互功能 项目概述 这个项目旨在通过使用HTML、CSS和JavaScript创建一个简单而功能…

使用支付宝/微信购买订阅Midjourney教程

Midjourney是一个由同名研究实验室开发的人工智能程式&#xff0c;可根据文本生成图像&#xff0c;因为Midjourney超强的AI绘画能力&#xff0c;吸引国内很多设计师和插画师人群去使用&#xff0c;普通用户一次有25张免费作图次数&#xff0c;对一个专业的设计师来说&#xff0…

WebLogic Server Supported Configurations

Supported Configurations 支持的配置: 不同版本的WebLogic Server对OS、JDK、AP Server、浏览器、数据等的支持,或者说在哪些OS,JDK等的配置上进行了动作保证。 10.3以后的版本(包含10.3) 10.3以后的版本支持的配置,在以下URL中可以找对对应的excel文件下载 https://ww…

C++之容器:双端队列queue用法实例(二百七十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

《灵性开悟不是你想的那样》PDF完整阅读

年前&#xff0c;我与本书的主编小良和一些编辑吃饭&#xff0c;免不了寒暄近况&#xff0c;她们礼貌地问我最近在干什么。 面对这群美丽又聪明的听众&#xff0c;我当然不会放过机会&#xff0c;来发表我当时最大的一项人生领悟。 “最近我有一个很大的领悟&#xff0c;”我说…

Hello,World驱动之旅,用户层简单交互(三)

目录 &#xff08;一&#xff09;上篇回顾&#xff1a;上一篇讲到用户层怎么与驱动模块进行交互。Hello&#xff0c;World驱动之旅&#xff0c;对外接口(二)-CSDN博客 &#xff08;二&#xff09;通过简单程序与驱动交互 读操作&#xff0c;代码如下&#xff1a; 写操作&…

Canal解决select count(*)执行慢的问题

前言 count 的常用方式&#xff0c;使用 count(*)来统计数据条数&#xff0c;但是 innodb 没有存储数据总数&#xff0c;所以执行起来就会很慢。 可以使用 expalin sql 来返回预估行数&#xff0c;expalin select count(*)....., 通过预估的方式,统计数据条数。可以使用 redi…

每日5题Day1 - LeetCode 1-5

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int[] twoSum(int[] nums, int target) {//返回值为Int[]数组&#xff0c;所以先初…

【计算机网络】数据链路层 差错控制 循环冗余码CRC及FCS 习题5

在计算机网络中&#xff0c;关于差错控制&#xff0c;我们主要要比特控制。 比特控制&#xff0c;简单理解&#xff0c;即在传输过程中&#xff0c;0变为1&#xff0c;1变为0。 差错控制主要有两类 自动重传请求ARQ——检错编码 &#xff08;接收方检测出差错&#xff0c;就设…

数字社交的先锋:探索Facebook的未来发展

在当今数字化时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分。而在众多社交平台中&#xff0c;Facebook一直处于引领地位&#xff0c;不断探索和创新&#xff0c;塑造着数字社交的未来。本文将深入探讨Facebook作为数字社交的先锋&#xff0c;探索其未来发展…

LabVIEW天然气压缩因子软件设计

LabVIEW天然气压缩因子软件设计 项目背景 天然气作为一种重要的能源&#xff0c;其压缩因子的准确计算对于流量的计量和输送过程的优化具有关键意义。传统的计算方法不仅步骤繁琐&#xff0c;而且难以满足现场快速响应的需求。因此&#xff0c;开发一款既能保证计算精度又便于…

BUUCTF靶场[MISC]wireshark、被嗅探的流量、神秘龙卷风、另一个世界

[misc]wireshark 考点&#xff1a;流量、追踪流 工具&#xff1a;wireshark 先看题目&#xff0c;管理员密码 将下载的文件用wireshark打开&#xff0c;查找flag 点击追踪tcp流&#xff0c;开始挨个查看flag [misc]被嗅探的流量 考点&#xff1a;流量、追踪流 工具&#xf…

010.理解异步性

异步消息传递是响应式系统的一个关键特性。但到底是什么异步性&#xff0c;为什么它对响应式应用程序如此重要?我们的人生注定在许多异步任务中。你可能没有意识到&#xff0c;但你的日常活动如果它们本质上不是异步的&#xff0c;那就太烦人了。要理解什么是异步&#xff0c;…

批量提取指定目录下的所有文件名

::批量提取指定目录下的所有文件名&#xff1a; echo off chcp 65001 > nul setlocal enabledelayedexpansion set "folder目录路径" for /r "%folder%" %%F in (*) do ( set "filename%%~nxF" echo !filename! ) endlocal pause…

ASIL详解

概念 随着汽车新四化的发展&#xff0c;整车E/E系统的复杂性也不断增加&#xff0c;功能安全正成为一种更主流的要求。汽车安全完整性等级&#xff08;ASIL&#xff09;分解为实现更高水平的诊断覆盖度提供了可靠而稳健的途径&#xff0c;并在开发具有更高ASIL等级的安全关键系…

Edge浏览器自动翻译功能按钮不见了

前言&#xff1a; 平时偶尔会用到Edge的页面翻译功能&#xff0c;使用挺方便。突然发现Edge浏览器的翻译功能不见 了。如下图所示&#xff1a; 解决思路&#xff1a; 1、从网上找各种解决方案也没有解决&#xff0c;其中有一个说到点右上角的三个点 2、点击设置…

专业矢量绘图软件Sketch for mac v100中文激活版

Sketch for Mac 是一款专业的矢量图形设计工具&#xff0c;主要用于 UI/UX 设计、网页设计、图标设计等领域。它的界面简洁、易用&#xff0c;功能强大&#xff0c;可以帮助设计师快速创建高质量的设计作品。 Sketch for Mac 可以轻松地创建矢量图形、图标、网页布局、移动应用…

利用关系感知一致性和虚拟特征补偿解决医学分类中的长尾问题

文章目录 Combat Long-Tails in Medical Classification with Relation-Aware Consistency and Virtual Features Compensation摘要方法实验结果 Combat Long-Tails in Medical Classification with Relation-Aware Consistency and Virtual Features Compensation 摘要 由于…

SpringBoot接收参数的19种方式

https://juejin.cn/post/7343243744479625267?share_token6D3AD82C-0404-47A7-949C-CA71F9BC9583