The Windows UI Library (WinUI) is a native user experience (UX) framework for both Windows desktop and UWP applications.
Windows UI库(WinUI)是适用于Windows桌面应用程序和UWP应用程序的本机用户体验(UX)框架。
通过将Fluent Design系统整合到所有体验、控件和样式中,WinUI使用最新的用户界面(UI)模式提供一致、直观且可访问的体验。
通过对桌面应用和UWP应用的支持,可使用WinUI从头构建应用,也可以使用熟悉的语言(例如C++
、C#
、Visual Basic
和Javascript
)通过用于Windows的React Native
逐步迁移现有的MFC、WinForms或WPF应用。
WinUI 3 | WinUI 2 |
---|---|
WinUI 3随Windows应用SDK提供。 | WinUI 2,第2代WinUI,随附于、独立NuGet包并与Windows10及更高版本SDK集成。 |
UX堆栈和控件库与OS和Windows10及更高版本SDK完全分离,包括UX堆栈的核心框架层、组合层和输入层。 | UX堆栈和控件库与OS和Windows10及更高版本SDK紧密耦合。 |
WinUI 3可用于生成生产就绪的桌面/Win32Windows应用。 | WinUI 2不能用于生成桌面/Win32Windows应用。 |
WinUI 3作为Windows应用SDK框架包的组件提供,在Windows应用SDK Visual Studio扩展(VSIX)中随附Visua Studio项目模板。 | WinUI 2的一部分通过操作系统本身(UWP WinRT API的Windows.UI.* 系列)提供,一部分作为一个库(“WindowsUI库2”)并在操作系统本身已包含内容的基础上附带其他控件、元素和最新样式。对于WinUI 2,这些功能以可下载的NuGet包的形式提供。但是,UI堆栈的其他重要部分仍内置于OS中,如核心XAML框架层、输入层和组合层。 |
WinUI 3支持将C#和.NET5用于桌面应用。 | WinUI 2仅支持C#和.NETNative应用。 |
WinUI 3对生产就绪UWP应用的支持目前为预览版。 | 通过将NuGet包安装到新的或现有UWP项目中,即可将WinUI 2并入生产UWP应用。然后,可以在新应用中直接引用WinUI控件和样式,也可以在现有应用中将“windows.ui.”命名空间引用更新为“microsoft.ui.”来进行引用。 |
WinUI 3支持基于Chromium的WebView2控件 | WinUI 2支持WebView控件 |
WinUI 3最低支持Windows10 2018年10月更新(版本1809 ,OS内部版本17763 )。 | WinUI 2最低支持Windows10创意者更新(版本1703 ,OS内部版本15063 )。 |
WinUI 3是本机UI平台组件,随附Windows应用SDK(与Windows10及更高版本SDK完全分离。)Windows应用SDK提供了一组统一的API和工具,可用于创建面向Windows10及更高版本且可发布到Microsoft Store的生产桌面应用。
Windows应用SDK之前称为
Project Reunion
。某些资产(如VSIX扩展和NuGet包)仍然使用此代号(它们将在未来的版本中被重命名)。
除了特定版本或资产仍然引用
Project Reunion
之外,所有文档中均使用Windows应用SDK。
目前Windows应用SDK稳定版已经到了v0.8,而预览版已经到了v1.0试验版,若要从0.8稳定版或预览版更新到1.0试验版可参阅:将现有项目更新到Windows应用 SDK的最新版本
https://github.com/microsoft/microsoft-ui-xaml/blob/main/docs/roadmap.md
https://microsoft.github.io/microsoft-ui-xaml/
a. WinUI 2的发行说明
https://docs.microsoft.com/zh-cn/windows/apps/winui/winui2/release-notes/
b. WinUI 3的发行说明
https://docs.microsoft.com/windows/apps/windows-app-sdk/stable-channel
https://blogs.windows.com/windowsdeveloper/
a. 对于WinUI 2的示例
https://www.microsoft.com/p/xaml-controls-gallery/9msvh128x2zt
https://github.com/Microsoft/Xaml-Controls-Gallery/
b. 对于WinUI 3的示例
https://www.microsoft.com/p/winui-3-controls-gallery/9p3jfpwwdzrc
https://github.com/microsoft/Xaml-Controls-Gallery/tree/winui3
https://docs.microsoft.com/zh-cn/windows/apps/windows-app-sdk/set-up-your-development-environment
a. Visual Studio
是一个全面的集成开发(IDE),可用于编辑、调试和生成代码,然后发布应用。
b. Windows SDK
可以访问应用程序OS公开的所有Windows API功能。构建Windows应用以及其他类型的组件(如服务和驱动程序)Windows SDK是必需的。默认情况下,Windows SDK随Visual Studio 2019一起安装。
c. Windows应用SDK(Windows App SDK)
是一组开发人员工具,它们表示Windows应用开发平台的下一个演变。Windows应用SDK提供一组统一的API和工具,可供从Windows11到Windows10版本1809上的任何桌面应用以一致的方式使用。
Windows App SDK有以下系统要求:
d. Visual Studio WinUI 3工具的支持
可以在Visual Studio 2019版本16.9、16.10和16.11预览版上生成、运行和部署使用稳定版Windows App SDK构建的应用。还可使用Visual Studio 2022 17.0预览版2及以上版本,通过Windows App SDK v0.8.2及以上版本生成应用。但是,若要利用最新的WinUI3工具功能(如热重载、Live Visual Tree和Live Property Explorer),需要具有Visual Studio 2019版本以及下表中列出的Windows App SDK稳定版本。
Windows应用SDK版本 | Visual Studio 2019 16.9 | Visual Studio 2019 16.10 | Visual Studio 2019 16.11预览版 | Visual Studio 2022 17.0预览版 |
---|---|---|---|---|
Windows应用SDK 0.5 | 工具不可用 | 提供的工具 | 工具不可用 | 工具不可用 |
Windows应用SDK 0.8 | 工具不可用 | 工具不可用 | 从Visual Studio 2019 16.11预览版3开始可用的工具 | 自Visual Studio 2022 17.0预览版2(Windows App SDKv0.8.2+起提供的工具) |
Windows应用SDK 1.0实验性 | 工具不可用 | 工具不可用 | 从Visual Studio 2019 16.11预览版3开始可用的工具 | 从Visual Studio 2022 17.0预览版2开始可用的工具 |
https://docs.microsoft.com/zh-cn/windows/apps/windows-app-sdk/set-up-your-development-environment
请确保这些工作负荷和组件随Visual Studio一起安装。 默认情况下,所有这些都处于选中状态。
请确保系统中已为正式NuGet服务索引启用了NuGet包源https://api.nuget.org/v3/index.json
。
在Visual Studio中,选择"工具"->NuGet程序包管理器->程序包管理器-"设置"以打开"选项"对话框。
在"选项"对话框的左窗格中,选择"包源"选项卡,并确保将指向的nuget.org
的包源https://api.nuget.org/v3/index.json
作为源URL。
https://github.com/microsoft/ProjectReunion/
Windows应用SDK提供了一组统一的api、项目模板以及用于生成Windows应用的其他工具。此SDK作为Visual Studio扩展(VSIX)提供。可以从两个扩展版本中进行选择:稳定和实验性。
a. 安装稳定版本
The latest release of the Windows App SDK is v0.8 stable. This version is supported for building production desktop apps and shipping them to the Microsoft Store, and includes the following components:
- WinUI 3
- DWriteCore
- MRTCore
- WebView2
https://aka.ms/windowsappsdk/stable-vsix
或搜索ProjectReunion
扩展安装。
b. 安装实验性版本(可选)
This is an experimental version of the Microsoft Windows App SDK. It contains features under development that may appear in future releases.
https://aka.ms/windowsappsdk/experimental-vsix
或搜索WindowsAppSDK(Experimental)
扩展安装。
c. 安装预览版本(可选)
The preview channel is not supported for use in production environments, and apps that use the preview releases cannot be published to the Microsoft Store.
1.0 Preview 3 Downloads | Description |
---|---|
Visual Studio 2019 C++ extension | Build apps with the Windows App SDK using the C++ extension for Visual Studio 2019 |
Visual Studio 2019 C# extension | Build apps with the Windows App SDK using the C# extension for Visual Studio 2019 |
Visual Studio 2022 C++ extension | Build apps with the Windows App SDK using the C++ extension for Visual Studio 2022 |
Visual Studio 2022 C# extension | Build apps with the Windows App SDK using the C# extension for Visual Studio 2022 |
Installer and MSIX packages | Deploy Windows App SDK with your app using the .exe installer and MSIX packages |
d. WinUI项目模板
https://docs.microsoft.com/zh-cn/windows/apps/winui/winui3/winui-project-templates-in-visual-studio#project-templates-for-winui-3
新建项目时搜索关键词WinUI
进行筛选,即可选择可用的C#或C++模板。
https://docs.microsoft.com/zh-cn/windows/apps/get-started/enable-your-device-for-development
https://developer.microsoft.com/store/register
https://github.com/TaylorShi/HelloWinUI3
https://docs.microsoft.com/zh-cn/windows/apps/winui/winui3/create-your-first-winui3-app
打开Visual Studio新建项目,筛选项目模板设置为:C#
=> Windows
=> WinUI
即可。
选择"打包的空白应用(桌面版WinUI 3)(Blank App, Packaged(WinUI 3 in desktop)
)"项目类型,然后单击"下一步"按钮。
输入项目名称HelloWinUI3
,并设置好本地的存储路径,然后单击"创建"按钮。
在"新式通用Windows平台项目"设置窗体中,选择最低兼容系统版本和最高兼容系统版本。
https://docs.microsoft.com/zh-cn/windows/uwp/updates-and-versions/choose-a-uwp-version?ocid=VSClient_VerX_NewProject_version
点击"确定"按钮,即开始创建WinUI 3
的项目,创建成功后,VS会自动打开此项目,如下图:
快捷键Ctrl+F5
或点击"本地计算机"按钮看看第一次运行效果,很完美,没有任何报错和异常。
运行效果如下图:
a. 打包之前我们先去创建一个证书
前往HelloWinUI3 (Package)
项目,双击Package.appxmanifest
这个配置文件,切换到打包设置
点击选择证书按钮,进入证书设置页面
点击创建按钮,创建一个新的证书,并且设置好密码,这里设置一个发布者公用名称吧,我们暂时就用HelloWinUI3
点击确定按钮之后,便会产生新的可用证书。
再次点击确定按钮,退出设置界面,我们可以看到后缀为.pfx
的证书就被添加到打包项目中了,而且打包设置也关联上了。
b. 创建应用程序包
在HelloWinUI3 (Package)
项目上右键,发布 => 创建应用程序包
这里我们选择"旁加载"模式,如果是要创建发布到Microsoft Store的包,那么就应该选"Microsoft Store"模式,暂时不勾选"启动自动更新",如果你有相关的Url支撑,可以勾选。
选择签名方法,选中我们刚才的证书,下一步。
版本号这里可以根据需要填写,原则上每次打包都会新增1位,但是我这里暂时先不勾选这个"自动递增"选项,体系结构这里暂时就勾选X86和X64就够了,接下来点击"创建"按钮即可。
创建成功之后,他会提示你创建成功和存储位置。
我们点击这个链接,通过资源管理器打开它,查看到具体的文件。
c. 第一次安装程序包
第一次直接双击.msixbundle
文件会提示该安装包不可信任,那是因为我们还没有信任它的证书,所以第一次安装,我们需要右键Install.ps1
这个脚本安装。
在Install.ps1
上右键,我们使用PowerShell打开它。
第一次安装,它会检测到证书,提示你安装,我们需要回车同意,进入另外一个提权的窗体,输入Y
同意安装证书才行。
接下来顺利的话会看到一个进度条闪过,进行安装了,并且提示应用安装成功。
接下来,我们可以前往开始菜单,找到它了。
运行看看。
同时,这时候,你再双击.msixbundle
文件运行,你会发现,这时候安装包已经被信任了,这样下次你再打旁加载的程序包,可以直接升级安装了。
通过前面的WinUI项目模板生成的HelloWinUI3
解决方案一共会生成两个项目,一个是HelloWinUI3
桌面项目,一个是HelloWinUI3 (Package)
打包项目。
a. "HelloWinUI3"桌面项目
在这个项目中,里面的控件和窗体都是派生自Microsoft.UI.Xaml
这个命名空间的。
我们可以进一步看看app.manifest
文件内容,当前示例的是一个WPF程序的标准模板。
进一步看看HelloWinUI3.csproj
文件内容,我们发现他是一个net5.0
的程序,并且依赖了Microsoft.ProjectReunion
、Microsoft.ProjectReunion.Foundation
、Microsoft.ProjectReunion.WinUI
这三个组件。
x86;x64;arm64
b. "HelloWinUI3 (Package)"打包项目
这个项目是一个Windows应用程序打包项目,用于把前面的桌面项目打包成MSIX应用包,提供了一种新式部署体验、通过包扩展与Windows 10及更高版本功能集成的功能以及更多其他功能。
正常情况下,这个项目还是解决方案的默认启动项目。
其中Package.appxmanifest
文件一般就是打包描述文件,里面可以设置多个维度的打包设置内容,包括应用程序名称、入口点、视觉资产、功能申明、内容URL、打包证书等。
我们看下它背后的实际内容是什么。
ws
Publisher="CN=HelloWinUI3"
Version="1.0.0.0" />
EntryPoint="$targetentrypoint$">
Description="HelloWinUI3 (Package)"
BackgroundColor="transparent"
Square150x150Logo="Images\Square150x150Logo.png"
Square44x44Logo="Images\Square44x44Logo.png">
其中:
Identity
组是应用的身份、版本号信息。Properties
组是应用属性、发布者、开始菜单图标信息。Dependencies
组是应用依赖的包组件。Resources
组是应用支持的多语言设置,其中x-generate
是一个占位的默认值。Applications
组是应用的视觉资产设置信息。Capabilities
组是应用的兼容设置,这里的runFullTrust
就是申请了所有权限。c. 添加项清单
在HelloWinUI3
桌面项目中后续我们肯定有需求新建项,不管是页面还是控件或者配置文件等等,在其项目上右键,切换到WinUI这个筛选项可以看到所有的WinUI支持的项清单资源。
相关模板清单如下:
模板 | 语言 | 说明 |
---|---|---|
空白页(WinUI3) | C#和C++ | 添加一个XAML文件和定义了新页面的代码文件,该页面派生自WinUI库中的Microsoft.UI.Xaml.Controls.Page类。 |
空白窗口(桌面版WinUI3) | C#和C++ | 添加一个XAML文件和定义了新窗口的代码文件,该窗口派生自WinUI库中的Microsoft.UI.Xaml.Window类。 |
自定义控件(WinUI3) | C#和C++ | 添加用于创建具有默认样式的模板化控件的代码文件。该模板化控件派生自WinUI库中的Microsoft.UI.Xaml.Controls.Control类。 |
资源字典(WinUI3) | C#和C++ | 添加XAML资源的空键控集合。有关详细信息,请参阅ResourceDictionary和XAML资源参考。 |
资源文件(WinUI3) | C#和C++ | 添加用于存储应用的字符串和条件资源的文件。可以借助此项对应用程序进行本地化。有关详细信息,请参阅对UI和应用包清单中的字符串进行本地化。 |
用户控件(WinUI3) | C#和C++ | 添加XAML文件和用于创建用户控件的代码文件,该用户控件派生自WinUI库中的Microsoft.UI.Xaml.Controls.UserControl类。通常,用户控件封装相关的现有控件并提供其自己的逻辑。 |
https://docs.microsoft.com/zh-cn/windows/apps/windows-app-sdk/single-project-msix?tabs=csharp-vs2019
通过前面的步骤,我们也知道了,通过项目模板创建解决方案之后,实际上会创建2个项目,一个是HelloWinUI3
桌面项目,一个是HelloWinUI3 (Package)
打包项目,如何你觉得这样很麻烦,实际上还可以合并成单项目,官方还是提供了一个思路来指导合并。
目前来说单项目MSIX仍然是一个预览功能,还不能用于生产环境,而且仅兼容WinUI3,使用单项目MSIX的好处就是,提供了更简洁的项目结构和更直接的开发体验。
a. 安装单项目MSIX的Visual Studio扩展
b. 修改"HelloWinUI3"桌面项目的项目描述文件
打开HelloWinUI3.csproj
文件,在PropertyGroup
节点下追加入内容:
Properties\PublishProfiles\win10-$(Platform).pubxml
最终如下:
x86;x64;arm64 Properties\PublishProfiles\win10-$(Platform).pubxml
app.manifest
保存。
c. 在"HelloWinUI3"桌面项目的属性页面的调试信息中,将启动改成MsixPackage
类型。
这里可能需要保存多次,才能最终设置上,不打紧。
d. 搬迁"HelloWinUI3 (Package)"打包项目的全部文件到"HelloWinUI3"桌面项目
e. 修改"HelloWinUI3"桌面项目的生成配置
接下来,选中"HelloWinUI3"桌面项目,然后进入Visual Studio顶部菜单,生成 => 配置管理器,切换展示所有的"活动解决方案配置"和"活动解决方案平台"的组合可能性,勾选"部署(Deploy
)"这个选项。
务必确保所有的组合都勾选了。
f. 把"HelloWinUI3"桌面项目设置为启动项目,尝试部署看看,最终效果也是完美。
g. 移除"HelloWinUI3 (Package)"打包项目
这时候,它对我们来说就没有价值了,可以从解决方案中移除了。
现在解决方案就单项目了,干干净净,简简单单。
https://docs.microsoft.com/zh-cn/windows/apps/get-started/build-apps-for-windows
a. 添加WinUI的新页面
新建WinUiWindow.xaml
页面,这里运用新命名空间xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:HelloWinUI3"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
mc:Ignorable="d">
实际运行效果:
很开心,啥新样式也没有,微软留下了一句话:
若要利用Windows 11的新外观,需使用WinUI 2.7库中的控件。(请注意,WinUI 3.0当前不支持新的视觉样式。)
https://github.com/microsoft/WindowsAppSDK/releases
We've just released the latest version of 1.0 Preview 3 of the Windows App SDK. This is the first version that adds Windows 11 styles to WinUI 3! This release includes new features, bug fixed, and provide access to APIs and features we are intending to include in the next 1.0 stable release that's coming out very soon!
a. 安装Preview 3 For Visual Studio 2022扩展
Windows App SDK Preview 3 For Visual Studio 2022
b. 新建WinUI3项目HelloWinUI3Preview
我们会惊讶发现,现在默认就是创建单项目了,这点很不错。
c. 尝试Windows 11样式控件
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:HelloWinUI3Preview"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
mc:Ignorable="d">
d. 部署后运行看看
嗯,很不错,果然已经是和WinUI 2.7一致的Windows 11新样式了,期待转正,貌似Xaml设计器还没准备好哈。
https://docs.microsoft.com/en-us/windows/apps/winui/winui3/create-your-first-winui3-app?tabs=csharp%2Ccsharp-unpackaged#instructions-for-winui-3-unpackaged-desktop-apps
This release of WinUI 3 is focused on supporting unpackaged apps on x86 and x64. Please view Instructions for WinUI 3 unpackaged desktop apps to configure your WinUI 3 application to support unpackaged deployment. Keep an eye for ARM64 support that will be added in the next stable release.
在Preview 3中,据说开始支持不打包的模式了,这到底是个什么鬼?
a. 新建空白WinUi3打包项目
这里我们弄个项目名,叫HelloWinUI3Unpackaged
,这里先按打包的模式建立项目即可
b. 修改项目文件改成打包模式为空
通过Visual Studio Code编辑HelloWinUI3Unpackaged
项目的HelloWinUI3Unpackaged.csproj
项目文件,在PropertyGroup
组的末尾,加上:
c. 将原来的项目清单文件从项目中移除
找到package.appxmanifest
移除它,并且从文件层面删掉它。
d. 把项目的调式配置文件的模式改掉
找到launchSettings.json
文件,把commandName
从MsixPackage
改成Project
。
e. 安装最新版本的Installer和Msix包
解压之后,把里面的WindowsAppSDK-Installer-x64
的WindowsAppRuntimeInstall.exe
用管理员模式安装一次。
f. 启动调试,这时候发现可以跑起来了
h. 获奖感言
说实话操作到现在都不知道自己在干嘛,好像是把WinUI从UWP的牢笼里挣脱出来的最后一下,因为我把熟悉的.appxmanifest
都给删了,意味着,这不是一个面向商店或者现代打包的应用了,而是一个可以自由组装的文件了,也许这正是微软对开放的承诺兑现吧!
https://github.com/TaylorShi/HelloWinUI2
https://docs.microsoft.com/zh-cn/windows/apps/winui/winui2/getting-started
打开Visual Studio新建项目,筛选项目模板设置为:C#
=> Windows
=> UWP
即可。
选择"空白应用(通用Windows)"项目类型,然后单击"下一步"按钮。
输入项目名称HelloWinUI2
,并设置好本地的存储路径,然后单击"创建"按钮。
在"新式通用Windows平台项目"设置窗体中,选择最低兼容系统版本(最低要求15063)和最高兼容系统版本(最低要求18362)。
点击"确定"按钮,即开始创建WinUI 2
的项目,创建成功后,VS会自动打开此项目,如下图:
快捷键Ctrl+F5
或点击"本地计算机"按钮看看第一次运行效果,很完美,没有任何报错和异常。
在项目HelloWinUI2
上右键,"管理Nuget程序包",搜索关键词WinUI
,定位到Nuget包Microsoft.UI.Xaml
,点击"安装"即可。
接下来,引入下WinUI的主题资源,打开并编辑App.xaml
,构建一个ResourceDictionary
,引入XamlControlsResources
。
https://docs.microsoft.com/zh-cn/windows/apps/design/style/xaml-resource-dictionary
https://docs.microsoft.com/zh-cn/windows/apps/design/controls/
a. 添加WinUI的新页面
新建WinUiPage.xaml
页面,这里运用新命名空间xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
。
我们引入一些新的控件做尝试:
COntent="Two-state CheckBox"
IsChecked="True" />
实际运行效果:
很开心,新样式都有了,这就是WinUI 2的欢乐
a. 打包之前我们先去创建一个证书
前往"HelloWinUI2"项目,双击Package.appxmanifest
这个配置文件,切换到"打包"设置
点击选择证书按钮,进入证书设置页面
点击创建按钮,创建一个新的证书,并且设置好密码,这里设置一个发布者公用名称吧,我们暂时就用HelloWinUI2
点击确定按钮之后,便会产生新的可用证书。
b. 创建应用程序包
在"HelloWinUI2"项目上右键,发布 => 创建应用程序包
这里我们选择"旁加载"模式,如果是要创建发布到Microsoft Store的包,那么就应该选"Microsoft Store"模式,暂时不勾选"启动自动更新",如果你有相关的Url支撑,可以勾选。
选择签名证书,选中我们刚才的证书,下一步。
版本号这里可以根据需要填写,原则上每次打包都会新增1位,但是我这里暂时先不勾选这个"自动递增"选项,体系结构这里暂时就勾选X86、X64、ARM就够了,接下来点击"创建"按钮即可。
创建成功之后,他会提示你创建成功和存储位置。
我们点击这个链接,通过资源管理器打开它,查看到具体的文件。
c. 第一次安装程序包
第一次直接双击.appxbundle
文件会提示该安装包不可信任,那是因为我们还没有信任它的证书,所以第一次安装,我们需要右键Install.ps1
这个脚本安装。
在Install.ps1
上右键,我们使用PowerShell
打开它。
第一次安装,它会检测到证书,提示你安装,我们需要回车同意,进入另外一个提权的窗体,输入Y
同意安装证书才行。
接下来顺利的话会看到一个进度条闪过,进行安装了,并且提示应用安装成功。
接下来,我们可以前往开始菜单,找到它了。
运行看看。
同时,这时候,你再双击.appxbundle
文件运行,你会发现,这时候安装包已经被信任了,这样下次你再打旁加载的程序包,可以直接升级安装了。
原文链接:https://www.cnblogs.com/taylorshi/p/15307941.html