介绍
本文是C#Advent Calendar 2018的第08天
最后,您可以在.NET Core上开发桌面。
在本文中,我们将尝试在.NET Core上运行WPF。
我们还将尝试使用最新的C#8.0功能和.NET Framework库。
使用的版本是预览版本。
此外,.NET Core在Linux或Mac上也不起作用。
如何安装
下载并安装VisualStudio 2019预览版。
顺便说一句,Visual Studio 2019与其他2017年完全不同,因此您可以一起安装和使用它。
- .NET桌面开发
- .NET Core跨平台开发
选中
进行安装。
还要下载并安装.NET Core 3.0 Preview。
你好,世界
您尚不能从Visual Studio创建新的.NET Core WPF,因此请从命令中创建它。
首先,创建一个具有任意项目名称的文件夹,然后在其中执行以下命令。
1 | dotnet new wpf |
然后从Visual Studio 2019打开生成的.csproj文件。
Xaml预览和属性窗口不起作用。
如果照原样执行,...
安全显示。
UI调试器(例如,Live Properties Explorer)不起作用,但是普通调试器可以工作,因此您可以在断点处停止。
关闭Visual Studio一次。
关闭时,将出现一个对话框,询问您是否要创建.sln文件,因此请创建它。
使用.NET Core API
重新打开解决方案。
尝试使用C#8语法。
首先,默认更改构建设置。
项目属性>构建>高级>语言版本
到C#8.0。
这次我将使用Range。
稍微更改MainWindow。
MainWindow.xaml
1 2 3 4 5 6 7 8 9 | <Window x:Class="WpfNetCoreVSPre.MainWindow" ... Title="MainWindow" Height="450" Width="800"> <StackPanel> <TextBlock Text="" x:Name="tbSelected" FontSize="72"/> <Button Content="Select Center" Click="ButtonSelectCenter_Click"/> <Button Content="Select Last" Click="ButtonSelectLast_Click"/> </StackPanel> </Window> |
MainWindow.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public partial class MainWindow : Window { private int[] source = new int[] { 0, 10, 20, 30, 40, 50 }; public MainWindow() { InitializeComponent(); } private void ButtonSelectCenter_Click(object sender, RoutedEventArgs e) { tbSelected.Text = String.Join(' ', source[2..5]); } private void ButtonSelectLast_Click(object sender, RoutedEventArgs e) { tbSelected.Text = $"{source[^1]}"; } } |
当按下按钮时,此功能可从原始数组的末尾获取第二至第四和第一。
执行结果。
使用.NET Framework库
接下来,我们使用一个与.NET Core官方不兼容的.NET Framework库。
这次MaterialDesignInXamlToolkit
使用。
使用Nuget将以下两个添加到您的项目中。
- 材质设计颜色
- 材质设计主题
由于它仅支持
.NET Framework,因此将发出警告,但我暂时将其忽略。
与MaterialDesignInXamlToolkit教程一起进行一些更改。
将ResourceDictionary添加到App.xaml。
我选择了深色主题:BlueGrey口音:青色。
应用程式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <Application x:Class="WpfNetCoreVSPre.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfNetCoreVSPre" StartupUri="MainWindow.xaml"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml" /> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" /> <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Bluegrey.xaml" /> <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Cyan.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application> |
接下来,稍微更改"视图"。隐藏代码不会更改。
我用卡片包围了TextBlock,更改了下面按钮的样式,并将Content更改为PackIcon。
MainWindow.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <Window x:Class="WpfNetCoreVSPre.MainWindow" ... xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" TextElement.Foreground="{DynamicResource MaterialDesignBody}" Background="{DynamicResource MaterialDesignPaper}" Title="MainWindow" Height="450" Width="800"> <StackPanel> <materialDesign:Card Margin="5"> <TextBlock Text="" x:Name="tbSelected" FontSize="72" Margin="5"/> </materialDesign:Card> <Button Content="Select Center" Click="ButtonSelectCenter_Click" Margin="5"/> <Button Click="ButtonSelectLast_Click" Style="{StaticResource MaterialDesignFloatingActionMiniAccentButton}" Margin="5"> <materialDesign:PackIcon Kind="PageLast"/> </Button> </StackPanel> </Window> |
执行结果。它工作正常。
到目前为止,除了警告消息外,它与.NET Framework没有任何区别。
概要
因此,我能够使用Visual Studio 2019和.NET Core 3.0同时使用最新的C#8.0语法和.NET Framework库。
从WinForm到UWP,Windows桌面开发有多种选择,但是.NET Core上的WPF似乎值得考虑作为新选择。
整个源代码位于以下位置。
https://github.com/soi013/WpfNetCoreVSPre
环境
Visual Studio 2019 16.0.0预览版1.0
.NET Core 3.0(测试版)
MaterialDesignThemes 2.5.0.1205
参考
将Windows桌面应用更新为.NET Core 3.0.100-preview-009754 –应用咨询团队
使用.NET Core 3.0进行桌面开发-Kazuki的博客@ hatena
宣布.NET Core 3预览版1和开放源代码Windows桌面框架| .NET博客
C#8.0范围| C; //身份不明的航班C博客