首页 > 其他分享 >从桌面端到移动端,.NET MAUI为什么对WPF开发人员更简单?

从桌面端到移动端,.NET MAUI为什么对WPF开发人员更简单?

时间:2023-05-18 10:22:40浏览次数:43  
标签:开发人员 WPF 应用程序 MAUI NET public 属性

.NET多平台应用程序UI(. NET MAUI)的市场吸引力与日俱增,这是微软最新的开发平台,允许开发者使用单个代码库创建跨平台应用程序。尽管很多WPF开发人员还没有跟上 .NET MAUI的潮流,但我们将在这篇文章中为大家展示他的潜力,具体来说想描述一下WPF和.NET MAUI之前的共性。

PS:DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。

DevExpress WPF 最新版下载

DevExpress技术交流群8:523159565      欢迎一起进群讨论

项目结构

与Xamarin不同,.NET MAUI解决方案包含针对所有目标平台的单个项目。像WPF一样, .NET MAUI项目包含一个App.xaml文件和主视图,另外可以发现AppShell类被用作根视觉元素:

从桌面端到移动端,.NET MAUI为什么对WPF开发人员更简单?

Resources文件夹包含跨每个平台使用的应用程序资源,开发者可以将特定于平台的资源放在Platforms目录的子文件夹中,以便在应用程序启动时执行相关代码。

XAML和代码隐藏

.NET MAUI页面具有与WPF窗口或用户控件相似的结构,根元素包含命名空间声明和x:Class属性,该属性定义了代码背后的类名:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiFirstApp.MainPage">
<ScrollView>
<!--...-->
</ScrollView>
</ContentPage>

InitializeComponent方法是根据XAML自动生成的:

namespace MauiFirstApp;
public partial class MainPage : ContentPage {
public MainPage() {
InitializeComponent();
}
}
绑定

.NET MAUI绑定使用与WPF绑定相似的上下文,它有类似的模式、相对源、转换器等。.NET MAUI使用了与WPF的DataContext类似的概念,唯一的区别是这个属性叫做BindingContext

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MauiFirstApp"
x:Class="MauiFirstApp.MainPage">
<ContentPage.BindingContext>
<local:ViewModel/>
</ContentPage.BindingContext>
<Label Text="{Binding FirstName}"/>
</ContentPage>
布局

.NET MAUI包含与GridStackPanel相似的东西,可以帮助开发者根据业务需求安排可视化元素:

<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ListView Grid.Column="0"/>
<StackLayout Grid.Column="1" WidthRequest="50">
<Button Text="Print"/>
<Button Text="Export"/>
</StackLayout>
</Grid>
资源

资源字典存储应用程序资源(样式、模板、转换器等),开发者可以使用StaticResource或DynamicResource标记扩展来将这些资源应用到元素上:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MauiFirstApp"
x:Class="MauiFirstApp.MainPage">
<ContentPage.Resources>
<Color x:Key="ButtonBackgroundColor">DarkOrange</Color>
<Color x:Key="ButtonForegroundColor">Black</Color>
</ContentPage.Resources>

<Button Text="Export"
BackgroundColor="{StaticResource ButtonBackgroundColor}"
TextColor="{StaticResource ButtonForegroundColor}"/>
</ContentPage>
模板

在.NET MAUI中,您可以使用 ControlTemplates 和DataTemplates来保持与WPF相同的UI灵活性:

<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding FirstName}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
样式

开发者可以创建显式和隐式样式来将类似的设置应用于多个元素:

<ContentPage.Resources>
<Style TargetType="Button">
<Setter Property="Background" Value="Orange"/>
<Setter Property="TextColor" Value="White"/>
<Setter Property="CornerRadius" Value="4"/>
</Style>
</ContentPage.Resources>
<StackLayout Orientation="Horizontal">
<Button Text="Next"/>
<Button Text="Prev"/>
</StackLayout>
触发器

声明式XAML触发器允许开发者有条件地应用样式:

<ContentPage.Resources>
<Style TargetType="Editor" x:Key="redOnFocusStyle">
<Style.Triggers>
<Trigger TargetType="Editor" Property="IsFocused" Value="True">
<Setter Property="Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</ContentPage.Resources>
<StackLayout VerticalOptions="Start">
<Editor Text="Red on Focus" Style="{StaticResource redOnFocusStyle}"/>
</StackLayout>
可视化树

与WPF非常相似,可视元素的层次结构允许开发者轻松地识别控件的父元素和子元素,Parent属性包含直接可视父属性和Children属性——直接子属性,主要区别在于.NET MAUI没有逻辑树。

MVVM

.NET MAUI使用与WPF相同的MVVM范例,许多MVVM框架(如Prism)都是跨平台的,因此您不太可能注意到许多差异。下面是一个基本的例子,演示了如何在视图模型中将编辑器绑定到属性,将按钮绑定到命令:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MauiFirstApp"
x:Class="MauiFirstApp.MainPage">
<ContentPage.BindingContext>
<local:ViewModel/>
</ContentPage.BindingContext>
<StackLayout VerticalOptions="Start">
<Editor Text="{Binding FirstName}"/>
<Button Text="Process" Command="{Binding ProcessUserCommand}"/>
</StackLayout>
</ContentPage>
public class ViewModel : INotifyPropertyChanged {
private string name;
public string FirstName {
get { return name; }
set {
name = value;
OnPropertyChanged();
}
}

public ICommand ProcessUserCommand { get; }

public ViewModel() {
ProcessUserCommand = new Command(ProcessUser);
}

void ProcessUser() {
Console.WriteLine(FirstName);
}

public event PropertyChangedEventHandler PropertyChanged;

public void OnPropertyChanged([CallerMemberName] string name = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
依赖项属性

.NET MAUI 依赖属性称为可绑定属性,它们使用类似的声明结构:一个静态字段和一个公共属性。BindableProperty.Create方法接受所有与DependencyProperty.Register类似的参数在WPF中注册:

public int MaxValue {
get => (int)GetValue(MaxValueProperty);
set => SetValue(MaxValueProperty, value);
}

public static readonly BindableProperty MaxValueProperty =
BindableProperty.Create("MaxValue", typeof(int), typeof(MainPage), 0, propertyChanged: OnMaxValueChanged);

private static void OnMaxValueChanged(BindableObject bindable, object oldValue, object newValue) {
// ...
}
结论

WPF和.NET MAUI开发有许多共同之处,如果您熟悉WPF,可以毫不费力地创建一个功能强大的.NET MAUI应用程序。


更多DevExpress线上公开课、中文教程资讯请上中文网获取

标签:开发人员,WPF,应用程序,MAUI,NET,public,属性
From: https://www.cnblogs.com/AABBbaby/p/17411119.html

相关文章

  • asp.net web应用程序,如果配置数据设置在 Web. config,每次修改配置项的值,都需要重启应
    问题:asp.netweb应用程序,如果配置数据设置在Web.config,每次修改配置项的值,都需要重启应用才能生效,怎么优化? 对于ASP.netweb应用程序,如果配置数据设置在Web.config,每次修改配置项的值,都需要重启应用才能生效。有没有更好的方法来配置应用程序所需的数据?解决每次修改配置......
  • vb.net 实现excel导入的时候滚动显示导入的数据
     如果你想在Excel导入过程中滚动显示导入的数据,可以使用逐行读取Excel数据并在滚动窗口中显示。在VB.NET中,你可以使用Excel.Range对象逐行读取Excel数据,并将每行数据添加到滚动窗口(如ListBox或TextBox)中进行显示。以下是一个示例代码,展示如何实现逐行滚动显示Exc......
  • 依赖注入 (DI) 是.NET中一个非常重要的软件设计模式,它可以帮助我们更好地管理和组织组
    依赖注入(DI)是.NET中一个非常重要的软件设计模式,它可以帮助我们更好地管理和组织组件,提高代码的可读性,扩展性和可测试性。在日常工作中,我们一定遇见过这些问题或者疑惑。Singleton服务为什么不能依赖Scoped服务?多个构造函数的选择机制?源码是如何识别循环依赖的?虽然我们可......
  • 原来.NET写的Linux桌面这么好看?
    如何使用Blazor在Linux平台下运行Desktop程序本文将讲解如何使用Blazor运行跨平台应用,应用到的技术有以下几点BlazorMasaBlazorPhotino.BlazorUbuntu用于验证跨平台性,并且是否提高开发效率,Blazor和Photino一块使用的技术称为BlazorHybrid,Blazor的优点Blazor是一种使用......
  • 【愚公系列】2023年05月 .NET CORE工具案例-对象映射Master的使用
    (文章目录)前言对象映射框架Master可以帮助开发人员将对象映射到数据库,以进行数据持久化。它还可以支持ORM(对象关系映射),以及其他数据库技术,比如存储过程。它可以帮助开发人员更快、更有效地完成数据库操作。Master官网:https://github.com/MapsterMapper/Mapster一、对象映射m......
  • 解决Net Framework2.0无法安装
    无需更新widows,听说你不能更新?什么?你也不行?一、那先试试这个可以么?感觉不太行,此处省略~二、不可以就用这个验证系统盘下是否存在文件夹C:\Windows\winsxs以管理员运行CMDdism.exe/online/enable-feature/featurename:NetFX3/Source:C:\Windows\winsxsOK......
  • ASP.NET Core Swagger接入使用IdentityServer4 的 WebApi
    写在前面是这样的,我们现在接口使用了Ocelot做网关,Ocelot里面集成了基于IdentityServer4的开发的授权中心用于对Api资源的保护。问题来了,我们的Api用了SwaggerUI做接口的自文档,那就蛋疼了,你接入了IdentityServer4的Api,用SwaggerUI调试、调用接口的话,妥妥的401,未授权啊。那有小伙伴就......
  • 第四周编程作业(一)-Building your Deep Neural Network: Step by Step
    BuildingyourDeepNeuralNetwork:StepbyStepWelcometoyourweek4assignment(part1of2)!Youhavepreviouslytraineda2-layerNeuralNetwork(withasinglehiddenlayer).Thisweek,youwillbuildadeepneuralnetwork,withasmanylayersasyou......
  • .NET爱上Java的时候
    在目前编程语言繁多的情况,很多编程开发者在选择什么样的语言作为自己谋生的途径而烦恼着。哪种语言或者开发模式,是以后软件开发市场的未来?而当前存在着两大对垒就:微软的.net和sun公司的java。他们各有什么样的优势和劣势?未来的市场会是怎么样?选择谁呢,这事关饭碗可是大事。昨天我看......
  • .net core 自颁发ssl证书,及客户端证书验证
    .netcore自颁发ssl证书,及客户端证书验证openshell颁发证书:先下载openshell,下载地址:https://slproweb.com/products/Win32OpenSSL.htmlopensslgenrsa-outserver.key2048opensslx509-req-inserver.csr-outserver.crt-signkeyserver.key-days36500opensslpk......