02-WPF_基础(一)

news2025/1/20 22:47:59

 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=(程序集名称)”;

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

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

相关文章

windows10安装WSL2及使用

1、安装 安装步骤见官网&#xff1a;https://learn.microsoft.com/zh-cn/windows/wsl/install-manual 2、调整WSL占用内存和空间 装完WSL后&#xff0c;查看任务管理器时发现vmmem进程占用内存过高。WSL内存默认值是电脑内存的一半&#xff0c;CPU默认值是电脑处理器个数&am…

vue3 中 使用 antd中的select 组件的带搜索框 展开后可对选项进行筛选搜索功能

鼠标进入以后下拉显示&#xff1a; 输入字符串以后&#xff1a; 可以看出对数据进行了筛选。 具体代码&#xff1a; 结构上&#xff1a;<a-selectv-model:value"formState.formFlow"show-searchallowClearplaceholder"输入选择流程":options"op…

生产透明化,交付无烦恼

生产进度总延误 质量把控总失守 计划赶不上变化 沟通不畅易误解 ...... 这些问题可能在一些工厂管理中几乎每天都在上演。 在如今快速变化的市场环境中&#xff0c;企业的生产效率和交付能力成为了衡量其竞争力的关键指标。而要实现高效、准确的生产和交付&#xff0c;透明化的…

无人机的用途

无人机&#xff0c;即无人驾驶飞机&#xff0c;其用途广泛且多样&#xff0c;涉及到多个领域。 在农业领域&#xff0c;无人机通过搭载各种传感器和相机&#xff0c;可以对农田进行空中巡视&#xff0c;收集农田数据&#xff0c;如土壤含水量、气温、湿度等&#xff0c;以及植…

《一》Word文字编辑软件---架构设计分析

1&#xff0c;简单介绍 今天&#xff0c;我们来模拟offic软件中的word文档&#xff0c;运行如图&#xff1a; 运行程序后会出现主界面&#xff0c;顶端的菜单栏包括“文件”“编辑”“格式”“窗口”和“帮助五个主菜单。 菜单栏下面是工具栏&#xff0c;包含了系统常用的功能按…

【2024】最新开源版 酒店预约小程序源码 酒店管理系统源码

源码简介&#xff1a; 随着移动互联网的快速发展&#xff0c;酒店行业也逐渐步入数字化、智能化的新时代。通过引入酒店预约小程序和酒店管理系统&#xff0c;酒店可以实现线上线下无缝对接&#xff0c;提高客户体验和服务质量。 分享一款【2024】最新酒店预约小程序源码、酒…

MyBatis缓存的概念

缓存回顾 什么是缓存&#xff1f; 缓存就是内存中的数据&#xff0c;常常来自对数据库查询结果的保存。使用缓存可以避免频繁与数据库交互&#xff0c;进而提高 响应速度 。 MyBatis 对缓存的支持 MyBatis 也提供了对缓存的支持&#xff0c;分为 一级缓存 和 二级缓存。可以…

ubuntu安装vim

安装vim 命令&#xff1a; apt istall vim

传感数据分析——加速度、速度与位移

传感数据分析——加速度、速度与位移 在许多科学和工程应用中&#xff0c;传感器数据的分析是一项至关重要的任务。特别是在运动、运输、结构监测等领域&#xff0c;传感器能够提供有关物体运动和变形的宝贵信息。本文将介绍如何利用Python进行传感器数据分析&#xff0c;重点…

免费申请HTTPS证书的几种方法

SSL证书&#xff08;Secure Sockets Layer Certificate&#xff09;是数字证书的一种&#xff0c;类似于驾驶证、护照和营业执照的电子副本。它是由受信任的数字证书颁发机构&#xff08;CA&#xff09;在验证服务器身份后颁发的&#xff0c;用于确保网络通信的安全性和加密性。…

前端面试:项目细节|项目重难点|已工作|做分享

面试官提问&#xff1a;分享一个项目中记忆比较深刻的需求&#xff1f;说说你是怎么解决的&#xff1f;解决过程有没有遇到什么困难&#xff1f; 答&#xff1a;我的回答&#xff08;我分点写思路&#xff0c;便于大家观看&#xff09;&#xff1a; &#xff08;1&#xff09…

如何实现数字化校园的高效运维

随着科技开展&#xff0c;国家大力支持各级各类学校建造数字化学校&#xff0c;综合利用互联网、大数据、人工智能和虚拟现实技能探究未来教育教育新模式。因为数字化学校的快速开展&#xff0c;学校网内设备类型很多&#xff0c;网络拓扑杂乱&#xff0c;信息运用繁复。各部门…

如何实现短链接跳转到微信小程序?怎么保证永久有效?

家人们&#xff0c;在如今这互联网高度发达的时代&#xff0c;流量那可真是生命线啊&#xff01;那每个运营者都得面对的一个关键问题就是&#xff1a;咋有效地进行引流。今儿个&#xff0c;咱就好好唠唠咋实现短链接跳转到微信小程序&#xff0c;还有咋保证小程序短链接能永久…

Linux(多线程)

//blockQueue.hpp #pragma once #include <iostream> #include <queue> #include <pthread.h> const int gcap 5; template <class T> class BlockQueue { public:BlockQueue(const int cap gcap):_cap(cap)//初始化阻塞队列的容量{pthread_mutex_in…

新一代GPT!GPT-4O:更快、更懂人类情感的人工智能新纪元

今天凌晨&#xff08;5.14凌晨&#xff09;&#xff0c;OpenAI 的 GPT-4O 版本在自然语言处理领域带来了革命性的改变。不仅在处理速度上获得了显著提升&#xff0c;GPT-4O 还增加了对人类情感的理解能力&#xff0c;这使得它在与人类的交互中更加自然和富有同理心。本文将深入…

相同的树LeetCode

100. 相同的树 - 力扣&#xff08;LeetCode100. 相同的树 - 力扣&#xff08; 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 /*** Definition…

Python 运筹优化13 Thompson Sampling 解读

说明 这部分应该是Multi-Armed Bandit的最后一部分了。 内容 1 On Line Ads 这个实验&#xff0c;最初的目的就是为了选出最佳的广告。首先&#xff0c;通过伯努利分布&#xff0c;模拟了某个广告的有效率。在真实场景里&#xff0c;我们是无法知道那个广告更好的。可能在t…

css中用于设置光标颜色的属性

caret-color 是一个 CSS 属性&#xff0c;它用于定义输入光标&#xff08;caret&#xff09;的颜色。这里的“插入光标”&#xff08;insertion caret&#xff09;指的是在网页的可编辑器区域内&#xff0c;用来指示用户的输入具体会插入到哪里的那个一闪一闪的形似竖杠 | 的东…

25考研数学,强化跟张宇还是武忠祥?

高数基础阶段结束&#xff0c;每年会有很多人&#xff0c;由于各种原因&#xff0c;在强化阶段换老师。 要提醒大家的是&#xff1a;25的情况和以前不一样&#xff01; 原因包括各位老师的课程大幅改动&#xff0c;以及24命题的变化。 首先看可行性&#xff1a;强化换武忠祥可…

可重构柔性装配产线:为工业制造领域注入了新的活力

随着科技的飞速发展&#xff0c;智能制造正逐渐成为引领工业革新的重要力量。在这一浪潮中&#xff0c;可重构柔性装配产线以其独特的技术优势和创新理念&#xff0c;为工业制造领域注入了新的活力&#xff0c;开启了创新驱动的智能制造新篇章。 可重构柔性装配产线是基于富唯智…