tag 标签: WPF

相关资源
  • 所需E币: 0
    时间: 2024-1-23 10:20
    大小: 2.58KB
    上传者: 开心就很好了
    一、什么是WPF?WPF是微软新一代图形系统,运行在.NETFramework3.0及以上版本下,为用户界面、2D/3D图形、文档和媒体提供了统一的描述和操作方法。使用WPF,您可以创建广泛的独立应用程序以及浏览器承载的应用程序。WPF的核心是一个与分辨率无关并且基于向量的呈现引擎,旨在利用现代图形硬件的优势。WPF通过一整套应用程序开发功能扩展了这个核心,这些功能包括ExtensibleApplicationMarkupLanguage(XAML)、控件、数据绑定、布局、2-D和3-D图形、动画、样式、模板、文档、媒体、文本和版式。WPF包含在Microsoft.NETFramework中,使您能够生成融入了.NETFramework类库的其他元素的应用程序。二、WPF的主要特点包括:  1.XAML:WPF使用XAML来定义应用程序的用户界面,这使得开发人员可以更加容易地进行设计和开发,而无需编写大量的代码。  2.数据绑定:WPF提供了一种方便的数据绑定机制,可以将应用程序的数据和用户界面进行绑定,使得数据的更改可以自动更新到用户界面上  3.图形和动画:WPF提供了一种强大的图形和动画功能,可以帮助开发人员创建具有丰富视觉体验的应用程序,这些应用程序可以包含2D和3D图形、图像、视频和动画等元素。  4.控件和模板:WPF提供了许多内置的控件和模板,使得开发人员可以更加容易地创建自定义的用户界面。  5.互操作性:WPF可以与其他技术进行互操作,例如WindowsForms、ASP.NET和ActiveX等。三、WPF安装visualstudio安装wpf开发工具visualstudio官网下载社区版本,有企业账户也可以下载企业版。安装成功后进入到visualstudio中,在工具菜单中打开获取工具与功能选项,加载其他需要的驱动包。将和NET有关的软件和驱动包全部加载进入visualstudio工具中来。App.xaml描述<Applicationx:Class="WpfApp1.App"  ---------------------------- 运行的项目wpf窗体名称       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  -----xml命名空间与规则       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"       xmlns:local="clr-namespace:WpfApp1"       StartupUri="MainWindow.xaml">   -----项目的启动窗体名称  <Application.Resources>     </Application.Resources></Application>如果需要更改启动窗体,在StartupUri=属性重新设置对应的启动窗体内容。namespaceWpfApp1{ publicpartialclassApp:System.Windows.Application{    ///<summary>    ///InitializeComponent    ///</summary>    [System.Diagnostics.DebuggerNonUserCodeAttribute()]    [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks","4.0.0.0")]    publicvoidInitializeComponent(){       //窗体模本内容      #line5"..\..\App.xaml"      this.StartupUri=newSystem.Uri("MainWindow.xaml",System.UriKind.Relative);      #linedefault      #linehidden    }    ///<summary>    ///ApplicationEntryPoint.    ///</summary>    [System.STAThreadAttribute()]    [System.Diagnostics.DebuggerNonUserCodeAttribute()]    [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks","4.0.0.0")]    publicstaticvoidMain(){      //默认启动窗体内容      WpfApp1.Appapp=newWpfApp1.App();      app.InitializeComponent();      app.Run();    }  }}}JHRS.GenerateAPI(代码生成工具)该工具是在线解析swagger生成供Refit调用的接口,生成的接口如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Configuration;usingSystem.Data;usingSystem.Linq;usingSystem.Threading.Tasks;usingSystem.Windows;namespaceWpfApp1{  ///<summary>  ///App.xaml的交互逻辑  ///</summary>  publicpartialclassApp:Application{  }}XAML摸板中的元素,都是(CLR对象)标记语言创建一个对象C#实例,因此使用XAML进行页面元素的描述来构建PWF页面内容。定义一个CLR类varconverter=newSystem.UriTypeConverter();varobj=converter.ConvertFrom("http://www.atmarkit.co.jp/");//↑System.Uri类(=<Uri>元素)包含//[TypeConverter(typeof(UriTypeConverter))]带属性总结:对于WPF开发来说,我并不是很熟悉,这段时间以来一直网上学习和借鉴一些开源的框架,再结合实际项目而整出来的这个开发框架;可能对于从事WPF开发的朋友来说有一定的借鉴意义。
  • 所需E币: 0
    时间: 2023-11-30 15:33
    大小: 3.79KB
    WPF主要编程模型通过托管代码公开。在WPF的早期设计阶段,曾有过大量关于如何界定系统的托管组件和非托管组件的争论。CLR提供一系列的功能,可以提高开发效率和可靠性(包括内存管理、错误处理和通用类型系统等),但这是需要付出代价的。PresentationFramework、PresentationCore和milcore是WPF的主要代码部分。在这些组件中,只有一个是非托管组件-milcore。milcore是以非托管代码编写的,目的是实现与DirectX的紧密集成。WPF中的所有显示均通过DirectX引擎完成,因此硬件和软件呈现都很高效。WPF还要求对内存和执行进行精细控制。milcore中的组合引擎受性能影响极大,需要放弃CLR的许多优点来提高性能。生成WPF时使用的主要体系结构原理之一是首选属性而不是方法或事件。属性具有声明性,可更方便地指定用途而不是操作。它还支持模型驱动或数据驱动的系统,以显示用户界面内容。这种理念的预期效果是创建更多可以绑定到的属性,从而更好地控制应用程序的行为。publicclassPaginationResourceParamaters{  privateint_pageNumber=1;  publicintPageNumber  {    get    {      return_pageNumber;    }    set    {      if(value>=1)      {        _pageNumber=value;      }    }  }  privateint_pageSize=10;  constintmaxPageSize=50;  publicintPageSize  {    get    {      return_pageSize;    }    set    {      if(value>=1)      {        _pageSize=(value>maxPageSize)?maxPageSize:value;      }    }  }}控件的最重要功能是模板化。如果将WPF的组合系统视为一个保留模式绘制系统,则控件可通过模板化以一种参数化的声明性方式描述其绘制。ControlTemplate实际上只是用于创建一组子元素的脚本,绑定到由控件提供的属性。if(!string.IsNullOrWhiteSpace(orderBy)){  if(orderBy.ToLowerInvariant()=="originalprice")  {    result=result.OrderBy(t=>t.OriginalPrice);  }  //result.ApplySort(orderBy,_mappingDictionary);}文件创建完成,回到旅游路线参数处理器文件,我们把分页相关的代码全部剪切到刚刚创建的新文件中。publicclassPaginationResourceParamaters{  privateint_pageNumber=1;  publicintPageNumber  {    get    {      return_pageNumber;    }    set    {      if(value>=1)      {        _pageNumber=value;      }    }  }  privateint_pageSize=10;  constintmaxPageSize=50;  publicintPageSize  {    get    {      return_pageSize;    }    set    {      if(value>=1)      {        _pageSize=(value>maxPageSize)?maxPageSize:value;      }    }  }}首先,把函数的返回语句全部comment掉,因为我们将要返回的不在是普通的列表,而是特殊的分页列表类型,PaginationList。接下来,重点来了,我们需要使用一个IQueryable延迟执行的语句来创建分页处理组件PaginationList。所以,IQueryableresult等于使用复制粘贴return的数据库访问语句代码,_context点Orders点Where。接下来,使用PaginationList的工厂函数来创建分页操作,执行异步操作await,Order类型的PaginationList,调用CreateAsync,异步创建创建分页操作的实例。最后直接返回这个实例就可以了。publicasyncTask<PaginationList<Order>>GetOrdersByUserId(  stringuserId,intpageSize,intpageNumber){  //returnawait_context.Orders.Where(o=>o.UserId==userId).ToListAsync();  IQueryable<Order>result=_context.Orders.Where(o=>o.UserId==userId);  returnawaitPaginationList<Order>.CreateAsync(pageNumber,pageSize,result);}第三方支付就是一个api请求,对于这个新的api,我们来新建一个控制器来单独处理吧,请同学们右键点击contorleres文件夹,文件名称第三方支付模拟处理器FakeVanderPaymentProcessController[ApiController][Route("api/[controller]")]publicclassFakeVanderPaymentProcessController:ControllerBase{  [HttpPost]  publicasyncTask<IActionResult>ProcessPayment(    [FromQuery]GuidorderNumber,    [FromQuery]boolreturnFault=false  )  {    //假装在处理    awaitTask.Delay(3000);    //ifreturnFaultistrue,返回支付失败    if(returnFault)    {      returnOk(new      {        id=Guid.NewGuid(),        created=DateTime.UtcNow,        approved=false,        message="Reject",        payment_metohd="信用卡支付",        order_number=orderNumber,        card=new{           card_type="信用卡",          last_four="1234"        }      });    }    returnOk(new    {      id=Guid.NewGuid(),      created=DateTime.UtcNow,      approved=true,      message="Reject",      payment_metohd="信用卡支付",      order_number=orderNumber,      card=new      {        card_type="信用卡",        last_four="1234"      }    });  }}在order控制器中完成对这个服务的依赖注入privatereadonlyIHttpContextAccessor_httpContextAccessor;privatereadonlyITouristRouteRepository_touristRouteRepository;privatereadonlyIMapper_mapper;privatereadonlyIHttpClientFactory_httpClientFactory;publicOrdersController(  IHttpContextAccessorhttpContextAccessor,  ITouristRouteRepositorytouristRouteRepository,  IMappermapper,  IHttpClientFactoryhttpClientFactory){  _httpContextAccessor=httpContextAccessor;  _touristRouteRepository=touristRouteRepository;  _mapper=mapper;  _httpClientFactory=httpClientFactory;}状态机完成,请同学们回答控制器。如果支付成功,使用订单order调用PaymentApprove函数,订单状态就会改变为支付成功,else{},如果支付失败,那么使用订单order调用PaymentReject,这样订单状态就会改变为失败了。//5.如果第三方支付成功.完成订单if(isApproved){  order.PaymentApprove();} else{  order.PaymentReject();}order.TransactionMetadata=transactionMetadata;await_touristRouteRepository.SaveAsync();其实json补丁就是一个json结构的数据,用来表达对目标数据的一些列操作,比如说,假定我们又一条旅游路线1234的数据是这样的{"id":"fb6d4f10-79ed-4aff-a915-4ce29dc9c7e1","title":"埃及阿斯旺12日跟团游","description":"【官方旗舰明星纯玩团】25人封顶|含签证小费全程餐|3晚尼罗河游轮+3晚红海全包度假村+1晚底比斯古都|升级内陆飞机|优质中文导游队伍|七大神庙+赠项目","originalPrice":11999.99,"discountPercent":0.1,"points":null,"features":null,"picture":{"url":"../images/abcdefg.jpg"}}WPF可创建动态的数据驱动的呈现系统。系统的每一部分均可通过驱动行为的属性集来创建对象。数据绑定是系统的基础部分,在每一层中均进行了集成。传统的应用程序创建一个显示内容,然后绑定到某些数据。在WPF中,控件的所有内容、显示内容的所有方面都是由某种类型的数据绑定生成的。通过在按钮内部创建复合控件并将其显示内容绑定到按钮的内容属性,会显示按钮中的文本。publicclassTouristRouteTitleMustBeDifferentFromDescriptionAttribute:ValidationAttribute{  protectedoverrideValidationResultIsValid(    objectvalue,     ValidationContextvalidationContext  )  {    vartouristRouteDto=(TouristRouteForCreationDto)validationContext.ObjectInstance;    if(touristRouteDto.Title==touristRouteDto.Description)    {      returnnewValidationResult(        "路线名称必须与路线描述不同",        new[]{"TouristRouteForCreationDto"}      );    }    returnValidationResult.Success;  }}
  • 所需E币: 1
    时间: 2022-5-2 20:56
    大小: 1.83MB
    上传者: ZHUANG
    基于WPF的汽车发动机ECU自动测试系统设计