{"id":97,"date":"2025-09-07T14:28:53","date_gmt":"2025-09-07T06:28:53","guid":{"rendered":"https:\/\/www.hopestudio.top\/?p=97"},"modified":"2025-09-13T23:12:33","modified_gmt":"2025-09-13T15:12:33","slug":"%e5%9f%ba%e4%ba%8euwp%ef%bc%88net-native%ef%bc%89%e7%9a%84%e5%a4%9a%e7%ba%bf%e7%a8%8b%e8%81%8a%e5%a4%a9%e5%ae%a4","status":"publish","type":"post","link":"http:\/\/www.hopestudio.top\/index.php\/2025\/09\/07\/%e5%9f%ba%e4%ba%8euwp%ef%bc%88net-native%ef%bc%89%e7%9a%84%e5%a4%9a%e7%ba%bf%e7%a8%8b%e8%81%8a%e5%a4%a9%e5%ae%a4\/","title":{"rendered":"\u57fa\u4e8eUWP\uff08NET Native\uff09\u7684\u591a\u7ebf\u7a0b\u804a\u5929\u5ba4"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<p><a href=\"https:\/\/gitpage.hopestudio.top\/\"><\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/www.hopestudio.top\/wp-content\/uploads\/2025\/09\/1757775592-xiaoguo.png'><img class=\"lazyload lazyload-style-11\" src=\"https:\/\/cn-sy1.rains3.com\/hope\/2026\/01\/1757775592-xiaoguo.png\"  loading=\"lazy\" decoding=\"async\" width=\"598\" height=\"436\" data-original=\"http:\/\/www.hopestudio.top\/wp-content\/uploads\/2025\/09\/1757775592-xiaoguo.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-132\"\/><\/div><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><a>\u53d1\u5e03\u4e8e\uff1aMar 22, 2025<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"\u55e8\u55e8\u55e8\u6211\u53c8\u6765\u4e86\uff01\"><a href=\"https:\/\/gitpage.hopestudio.top\/2025\/03\/22\/%E5%9F%BA%E4%BA%8EUWP%EF%BC%88NET%20Native%EF%BC%89%E7%9A%84%E5%A4%9A%E7%BA%BF%E7%A8%8B%E8%81%8A%E5%A4%A9%E5%AE%A4\/#%E5%97%A8%E5%97%A8%E5%97%A8%E6%88%91%E5%8F%88%E6%9D%A5%E4%BA%86%EF%BC%81\"><\/a>\u55e8\u55e8\u55e8\u6211\u53c8\u6765\u4e86\uff01<\/h1>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/music.163.com\/outchain\/player?type=2&#038;id=509626&#038;auto=0&#038;height=66\n<\/div><\/figure>\n\n\n\n<p>\u8fd9\u51e0\u5929\u6211\u5728\u7f16\u5199WinUI3\u548cUWP\u3002\u56e0\u4e3a\u6211\u7684\u5c0f\u7c734\u642d\u8f7d\u4e86<em>\u5148\u8fdb<\/em>\u7684Windows Phone10\u3002\u63a5\u4e0b\u6765\uff0c\u6211\u5c06\u5c55\u793a\u4e00\u4e2a\u591a\u7ebf\u7a0b\u804a\u5929\u5ba4\u7684\u4ee3\u7801\u5e76\u5206\u4eab\u8f6f\u4ef6\u5305\uff08.7z\uff09\u3002<br>\u6211\u662f\u53c2\u8003\u4e86\u4e00\u4f4dCSDN\u5927\u725b\u7684\u6587\u7ae0\uff1a<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"https:\/\/blog.csdn.net\/weixin_42582160\/article\/details\/122262483\">https:\/\/blog.csdn.net\/weixin_42582160\/article\/details\/122262483<\/a><br>\u5e76\u4e14\u4f7f\u7528\u4e86\u4e00\u70b9<em>\u79d1\u6280\u7684\u529b\u91cf<\/em>\uff08DeepSeek\uff09\u505a\u7684\u3002<br><img decoding=\"async\" src=\"https:\/\/gitpage.hopestudio.top\/img\/post_cover\/20250322\/xiaoguo.png\"  alt=\"\u622a\u56fe\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u4ee5\u4e0b\u662f\u4e3b\u8981\u4ee3\u7801\uff1a\"><a href=\"https:\/\/gitpage.hopestudio.top\/2025\/03\/22\/%E5%9F%BA%E4%BA%8EUWP%EF%BC%88NET%20Native%EF%BC%89%E7%9A%84%E5%A4%9A%E7%BA%BF%E7%A8%8B%E8%81%8A%E5%A4%A9%E5%AE%A4\/#%E4%BB%A5%E4%B8%8B%E6%98%AF%E4%B8%BB%E8%A6%81%E4%BB%A3%E7%A0%81%EF%BC%9A\"><\/a>\u4ee5\u4e0b\u662f\u4e3b\u8981\u4ee3\u7801\uff1a<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"xaml\"><a href=\"https:\/\/gitpage.hopestudio.top\/2025\/03\/22\/%E5%9F%BA%E4%BA%8EUWP%EF%BC%88NET%20Native%EF%BC%89%E7%9A%84%E5%A4%9A%E7%BA%BF%E7%A8%8B%E8%81%8A%E5%A4%A9%E5%AE%A4\/#xaml\"><\/a>xaml<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"csharp\"><a href=\"https:\/\/gitpage.hopestudio.top\/2025\/03\/22\/%E5%9F%BA%E4%BA%8EUWP%EF%BC%88NET%20Native%EF%BC%89%E7%9A%84%E5%A4%9A%E7%BA%BF%E7%A8%8B%E8%81%8A%E5%A4%A9%E5%AE%A4\/#csharp\"><\/a>csharp<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;Pagex:Class=\"SimpleChat.MainPage\"xmlns=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\"xmlns:x=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\"xmlns:local=\"using:SimpleChat\"xmlns:d=\"http:\/\/schemas.microsoft.com\/expression\/blend\/2008\"xmlns:mc=\"http:\/\/schemas.openxmlformats.org\/markup-compatibility\/2006\"mc:Ignorable=\"d\">&lt;Grid>&lt;Grid.ColumnDefinitions>&lt;ColumnDefinition Width=\"2*\"\/>&lt;ColumnDefinition Width=\"1*\"\/>&lt;\/Grid.ColumnDefinitions>&lt;Grid.RowDefinitions>&lt;RowDefinition Height=\"*\"\/>&lt;RowDefinition Height=\"Auto\"\/>&lt;\/Grid.RowDefinitions>&lt;!-- \u804a\u5929\u663e\u793a\u533a\u57df -->&lt;ScrollViewer Grid.Column=\"0\" Grid.Row=\"0\" VerticalScrollBarVisibility=\"Auto\">&lt;TextBox x:Name=\"ChatEdit\" IsReadOnly=\"True\" AcceptsReturn=\"True\" TextWrapping=\"Wrap\"\/>&lt;\/ScrollViewer>&lt;!-- \u8f93\u5165\u6846 -->&lt;TextBox x:Name=\"InputLine\" Grid.Column=\"0\" Grid.Row=\"1\" PlaceholderText=\"\u5728\u6b64\u8f93\u5165\u6d88\u606f...\"\/>&lt;!-- \u53d1\u9001\u6309\u94ae -->&lt;Button x:Name=\"SendBtn\" Grid.Column=\"1\" Grid.Row=\"1\" Content=\"\u53d1\u9001\" Click=\"SendBtn_Click\"\/>&lt;!-- \u914d\u7f6e\u9762\u677f -->&lt;StackPanel Grid.Column=\"1\" Grid.Row=\"0\" Margin=\"10\">&lt;TextBlock Text=\"\u670d\u52a1\u5668 IP\"\/>&lt;TextBox x:Name=\"IpEdit\" PlaceholderText=\"\u8f93\u5165 IP \u5730\u5740\"\/>&lt;Button x:Name=\"HostIpBtn\" Content=\"\u83b7\u53d6\u672c\u673a IP\" Click=\"HostIpBtn_Click\"\/>&lt;TextBlock Text=\"\u670d\u52a1\u5668\u7aef\u53e3\"\/>&lt;TextBox x:Name=\"PortEdit\" PlaceholderText=\"\u8f93\u5165\u7aef\u53e3\"\/>&lt;TextBlock Text=\"\u6635\u79f0\"\/>&lt;TextBox x:Name=\"HostEdit\" PlaceholderText=\"\u8f93\u5165\u6635\u79f0\"\/>&lt;RadioButton x:Name=\"ServerRbtn\" Content=\"\u670d\u52a1\u5668\" Checked=\"ServerRbtn_Checked\"\/>&lt;RadioButton x:Name=\"ClientRbtn\" Content=\"\u5ba2\u6237\u7aef\" Checked=\"ClientRbtn_Checked\"\/>&lt;Button x:Name=\"ConnectBtn\" Content=\"\u8fde\u63a5\u670d\u52a1\u5668\" Click=\"ConnectBtn_Click\"\/>&lt;Button x:Name=\"BuildServerBtn\" Content=\"\u521b\u5efa\u670d\u52a1\u5668\" Click=\"BuildServerBtn_Click\"\/>&lt;Button x:Name=\"QuitBtn\" Content=\"\u9000\u51fa\" Click=\"QuitBtn_Click\"\/>&lt;\/StackPanel>&lt;\/Grid>&lt;\/Page><\/code><\/pre>\n\n\n\n<p>666\u8fd9\u4e2a\u4ee3\u7801\u6846\u773c\u90fd\u4e0d\u6f14\u4e86\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Windows.UI.ViewManagement;\nusing Windows.Networking;\nusing Windows.Networking.Sockets;\nusing Windows.Storage.Streams;\n\nnamespace SimpleChat\n{\npublic sealed partial class MainPage : Page\n{\nprivate StreamSocket _socket; \/\/ \u670d\u52a1\u5668\u6216\u5ba2\u6237\u7aef StreamSocket\nprivate bool _isServer = true; \/\/ \u662f\u5426\u4e3a\u670d\u52a1\u5668\u6a21\u5f0f\nprivate bool _isRunning = false; \/\/ \u670d\u52a1\u5668\u662f\u5426\u6b63\u5728\u8fd0\u884c\nprivate List &lt;StreamSocket> _clientSockets = new List &amp;lt;StreamSocket>(); \/\/ \u5ba2\u6237\u7aef\u5217\u8868\n\npublic MainPage()\n{\nthis.InitializeComponent();\n\n\/\/ \u8bbe\u7f6e\u7a97\u53e3\u6807\u9898\nvar view = ApplicationView.GetForCurrentView();\nview.Title = \"SimpleChat\";\n}\n\n\/\/ \u53d1\u9001\u6d88\u606f\u6309\u94ae\u70b9\u51fb\u4e8b\u4ef6\nprivate void SendBtn_Click(object sender, RoutedEventArgs e)\n{\nstring message = InputLine.Text;\nif (!string.IsNullOrEmpty(message))\n{\nstring hostName = HostEdit.Text.Trim();\nif (string.IsNullOrEmpty(hostName))\n{\nhostName = \"Anonymous\"; \/\/ \u9ed8\u8ba4\u6635\u79f0\n}\n\nstring fullMessage = $\"{hostName}: {message}\";\nInputLine.Text = string.Empty; \/\/ \u6e05\u7a7a\u8f93\u5165\u6846\n\nif (_isServer)\n{\n\/\/ \u5982\u679c\u662f\u670d\u52a1\u5668\uff0c\u5728\u672c\u5730\u663e\u793a \"You: sth\"\nChatEdit.Text += $\"{Environment.NewLine}You: {message}\";\n\n\/\/ \u5e7f\u64ad\u6d88\u606f\u7ed9\u6240\u6709\u5ba2\u6237\u7aef\uff08\u4e0d\u5305\u62ec\u81ea\u5df1\uff09\nBroadcastMessage(fullMessage);\n}\nelse\n{\n\/\/ \u5982\u679c\u662f\u5ba2\u6237\u7aef\uff0c\u5728\u672c\u5730\u663e\u793a \"You: sth\"\nChatEdit.Text += $\"{Environment.NewLine}You: {message}\";\n\n\/\/ \u53d1\u9001\u6d88\u606f\u5230\u670d\u52a1\u5668\nSendMessageToServer(fullMessage);\n}\n}\n}\n\n\/\/ \u83b7\u53d6\u672c\u673a IP \u6309\u94ae\u70b9\u51fb\u4e8b\u4ef6\nprivate void HostIpBtn_Click(object sender, RoutedEventArgs e)\n{\nvar hostNames = Windows.Networking.Connectivity.NetworkInformation.GetHostNames();\nforeach (var hostName in hostNames)\n{\nif (hostName.Type == Windows.Networking.HostNameType.Ipv4)\n{\nIpEdit.Text = hostName.ToString();\nbreak;\n}\n}\n}\n\n\/\/ \u670d\u52a1\u5668\u6a21\u5f0f\u5355\u9009\u6309\u94ae\u70b9\u51fb\u4e8b\u4ef6\nprivate void ServerRbtn_Checked(object sender, RoutedEventArgs e)\n{\n_isServer = true;\nConnectBtn.IsEnabled = false;\nBuildServerBtn.IsEnabled = true;\n}\n\n\/\/ \u5ba2\u6237\u7aef\u6a21\u5f0f\u5355\u9009\u6309\u94ae\u70b9\u51fb\u4e8b\u4ef6\nprivate void ClientRbtn_Checked(object sender, RoutedEventArgs e)\n{\n_isServer = false;\nConnectBtn.IsEnabled = true;\nBuildServerBtn.IsEnabled = false;\n}\n\n\/\/ \u8fde\u63a5\u670d\u52a1\u5668\u6309\u94ae\u70b9\u51fb\u4e8b\u4ef6\nprivate async void ConnectBtn_Click(object sender, RoutedEventArgs e)\n{\nif (!_isServer)\n{\nstring ip = IpEdit.Text.Trim();\nif (string.IsNullOrEmpty(ip))\n{\nChatEdit.Text += $\"{Environment.NewLine}IP address cannot be empty!\";\nreturn;\n}\n\nif (!int.TryParse(PortEdit.Text, out int port))\n{\nChatEdit.Text += $\"{Environment.NewLine}Invalid port number!\";\nreturn;\n}\n\nawait ConnectToServerAsync(ip, port);\n}\n}\n\n\/\/ \u521b\u5efa\u670d\u52a1\u5668\u6309\u94ae\u70b9\u51fb\u4e8b\u4ef6\nprivate async void BuildServerBtn_Click(object sender, RoutedEventArgs e)\n{\nif (_isServer)\n{\nstring ip = IpEdit.Text.Trim();\nif (string.IsNullOrEmpty(ip))\n{\nChatEdit.Text += $\"{Environment.NewLine}IP address cannot be empty!\";\nreturn;\n}\n\nif (!int.TryParse(PortEdit.Text, out int port))\n{\nChatEdit.Text += $\"{Environment.NewLine}Invalid port number!\";\nreturn;\n}\n\nawait StartServerAsync(ip, port);\n}\n}\n\n\/\/ \u9000\u51fa\u6309\u94ae\u70b9\u51fb\u4e8b\u4ef6\nprivate void QuitBtn_Click(object sender, RoutedEventArgs e)\n{\nif (_socket != null)\n{\n_socket.Dispose();\n}\nApplication.Current.Exit();\n}\n\n\/\/ \u542f\u52a8\u670d\u52a1\u5668\nprivate async Task StartServerAsync(string ip, int port)\n{\ntry\n{\nvar listener = new StreamSocketListener();\nlistener.ConnectionReceived += OnConnectionReceived;\nawait listener.BindEndpointAsync(new HostName(ip), port.ToString());\n\n_isRunning = true;\nstring hostName = HostEdit.Text.Trim();\nif (string.IsNullOrEmpty(hostName))\n{\nhostName = \"Server\"; \/\/ \u9ed8\u8ba4\u670d\u52a1\u5668\u540d\u79f0\n}\nChatEdit.Text += $\"{Environment.NewLine}{hostName} started on {ip}:{port}\";\n}\ncatch (Exception ex)\n{\nChatEdit.Text += $\"{Environment.NewLine}Server error: {ex.Message}\";\n}\n}\n\nprivate async void OnConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)\n{\nvar clientSocket = args.Socket;\n_clientSockets.Add(clientSocket);\n\nawait Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n{\nChatEdit.Text += $\"{Environment.NewLine}Client connected: {clientSocket.Information.RemoteAddress}\";\n});\n\n_ = Task.Run(() => HandleClientAsync(clientSocket));\n}\n\n\/\/ \u5904\u7406\u5ba2\u6237\u7aef\u8fde\u63a5\nprivate async Task HandleClientAsync(StreamSocket clientSocket)\n{\ntry\n{\nvar reader = new DataReader(clientSocket.InputStream);\nreader.InputStreamOptions = InputStreamOptions.Partial;\n\nwhile (true)\n{\nawait reader.LoadAsync(1024);\nif (reader.UnconsumedBufferLength == 0) break; \/\/ \u5ba2\u6237\u7aef\u65ad\u5f00\u8fde\u63a5\n\nstring message = reader.ReadString(reader.UnconsumedBufferLength);\nawait Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n{\nChatEdit.Text += $\"{Environment.NewLine}{message}\"; \/\/ \u670d\u52a1\u5668\u663e\u793a\u6d88\u606f\n});\n\n\/\/ \u5e7f\u64ad\u6d88\u606f\u7ed9\u6240\u6709\u5ba2\u6237\u7aef\uff08\u4e0d\u5305\u62ec\u53d1\u9001\u8005\uff09\nBroadcastMessage(message, clientSocket);\n}\n}\ncatch (Exception ex)\n{\nawait Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n{\nChatEdit.Text += $\"{Environment.NewLine}Client error: {ex.Message}\";\n});\n}\nfinally\n{\n_clientSockets.Remove(clientSocket);\nclientSocket.Dispose();\n}\n}\n\n\/\/ \u5e7f\u64ad\u6d88\u606f\u7ed9\u6240\u6709\u5ba2\u6237\u7aef\uff08\u4e0d\u5305\u62ec\u53d1\u9001\u8005\uff09\nprivate async void BroadcastMessage(string message, StreamSocket senderSocket = null)\n{\nforeach (var clientSocket in _clientSockets)\n{\nif (clientSocket != senderSocket)\n{\nvar writer = new DataWriter(clientSocket.OutputStream);\nwriter.WriteString(message);\nawait writer.StoreAsync();\nwriter.DetachStream();\n}\n}\n}\n\n\/\/ \u8fde\u63a5\u5230\u670d\u52a1\u5668\nprivate async Task ConnectToServerAsync(string ip, int port)\n{\ntry\n{\n_socket = new StreamSocket();\nawait _socket.ConnectAsync(new HostName(ip), port.ToString());\n\nChatEdit.Text += $\"{Environment.NewLine}Connected to server at {ip}:{port}\";\n\n\/\/ \u542f\u52a8\u63a5\u6536\u6d88\u606f\u7684\u4efb\u52a1\n_ = Task.Run(() => ReceiveMessagesAsync(_socket));\n}\ncatch (Exception ex)\n{\nChatEdit.Text += $\"{Environment.NewLine}Connection error: {ex.Message}\";\n}\n}\n\n\/\/ \u63a5\u6536\u670d\u52a1\u5668\u6d88\u606f\nprivate async Task ReceiveMessagesAsync(StreamSocket socket)\n{\ntry\n{\nvar reader = new DataReader(socket.InputStream);\nreader.InputStreamOptions = InputStreamOptions.Partial;\n\nwhile (true)\n{\nawait reader.LoadAsync(1024);\nif (reader.UnconsumedBufferLength == 0) break; \/\/ \u670d\u52a1\u5668\u65ad\u5f00\u8fde\u63a5\n\nstring message = reader.ReadString(reader.UnconsumedBufferLength);\nawait Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n{\nChatEdit.Text += $\"{Environment.NewLine}{message}\"; \/\/ \u5ba2\u6237\u7aef\u663e\u793a\u6d88\u606f\n});\n}\n}\ncatch (Exception ex)\n{\nawait Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n{\nChatEdit.Text += $\"{Environment.NewLine}Receive error: {ex.Message}\";\n});\n}\n}\n\n\/\/ \u53d1\u9001\u6d88\u606f\u5230\u670d\u52a1\u5668\nprivate async void SendMessageToServer(string message)\n{\nif (_socket != null)\n{\nvar writer = new DataWriter(_socket.OutputStream);\nwriter.WriteString(message);\nawait writer.StoreAsync();\nwriter.DetachStream();\n}\n}\n}\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u8fd9\u91cc\u662f\u6211\u6253\u5305\u8fc7\u7684\uff08Appxbundle\u4e0d\u542barm64\uff09\u7248\u672c\u662f1-0-3-0\"><a href=\"https:\/\/gitpage.hopestudio.top\/2025\/03\/22\/%E5%9F%BA%E4%BA%8EUWP%EF%BC%88NET%20Native%EF%BC%89%E7%9A%84%E5%A4%9A%E7%BA%BF%E7%A8%8B%E8%81%8A%E5%A4%A9%E5%AE%A4\/#%E8%BF%99%E9%87%8C%E6%98%AF%E6%88%91%E6%89%93%E5%8C%85%E8%BF%87%E7%9A%84%EF%BC%88Appxbundle%E4%B8%8D%E5%90%ABarm64%EF%BC%89%E7%89%88%E6%9C%AC%E6%98%AF1-0-3-0\"><\/a>\u8fd9\u91cc\u662f\u6211\u6253\u5305\u8fc7\u7684\uff08Appxbundle\u4e0d\u542barm64\uff09\u7248\u672c\u662f1.0.3.0<\/h3>\n\n\n\n<p><a target=\"_blank\" rel=\"noreferrer noopener\" href=\"https:\/\/www.123865.com\/s\/qPh5Vv-kajN\">https:\/\/www.123865.com\/s\/qPh5Vv-kajN<\/a><br><a target=\"_blank\" rel=\"noreferrer noopener\" href=\"https:\/\/www.123684.com\/s\/qPh5Vv-kajN\">https:\/\/www.123684.com\/s\/qPh5Vv-kajN<\/a><br>\u597d\u4e86\u5c31\u5230\u8fd9\u91cc\u5427\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u53d1\u5e03\u4e8e\uff1aMar 22, 2025 \u55e8\u55e8\u55e8\u6211\u53c8\u6765\u4e86\uff01 \u8fd9\u51e0\u5929\u6211\u5728\u7f16\u5199WinUI3\u548cUWP\u3002\u56e0\u4e3a\u6211\u7684\u5c0f\u7c734\u642d\u8f7d\u4e86\u5148 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":131,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-97","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"http:\/\/www.hopestudio.top\/index.php\/wp-json\/wp\/v2\/posts\/97","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.hopestudio.top\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.hopestudio.top\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.hopestudio.top\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.hopestudio.top\/index.php\/wp-json\/wp\/v2\/comments?post=97"}],"version-history":[{"count":3,"href":"http:\/\/www.hopestudio.top\/index.php\/wp-json\/wp\/v2\/posts\/97\/revisions"}],"predecessor-version":[{"id":137,"href":"http:\/\/www.hopestudio.top\/index.php\/wp-json\/wp\/v2\/posts\/97\/revisions\/137"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.hopestudio.top\/index.php\/wp-json\/wp\/v2\/media\/131"}],"wp:attachment":[{"href":"http:\/\/www.hopestudio.top\/index.php\/wp-json\/wp\/v2\/media?parent=97"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.hopestudio.top\/index.php\/wp-json\/wp\/v2\/categories?post=97"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.hopestudio.top\/index.php\/wp-json\/wp\/v2\/tags?post=97"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}