{"id":777,"date":"2021-04-27T20:11:37","date_gmt":"2021-04-27T11:11:37","guid":{"rendered":"https:\/\/roundwide.com\/?p=777"},"modified":"2021-10-29T21:43:24","modified_gmt":"2021-10-29T12:43:24","slug":"implementing-system-tray-app-with-wpf-and-mvvm","status":"publish","type":"post","link":"https:\/\/roundwide.com\/ja\/implementing-system-tray-app-with-wpf-and-mvvm\/","title":{"rendered":"\u30b7\u30b9\u30c6\u30e0\u30c8\u30ec\u30a4\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092WPF\u3068MVVM\u3067\u5b9f\u88c5\u3059\u308b"},"content":{"rendered":"\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001WPF\u3068MVVM\u3068\u306b\u3088\u308b\u30b7\u30b9\u30c6\u30e0\u30c8\u30ec\u30a4\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e00\u5b9f\u88c5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3059\u308b\u3002\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u5168\u4f53\u306f<a href=\"https:\/\/github.com\/fujieda\/SystemTrayApp.WPF\/tree\/main\/SystemTrayApp.WPF\" data-type=\"URL\" data-id=\"https:\/\/github.com\/fujieda\/SystemTrayApp.WPF\/tree\/main\/SystemTrayApp.WPF\">GitHub\u30ea\u30dd\u30b8\u30c8\u30ea<\/a>\u306b\u3042\u308b\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"682\" height=\"204\" src=\"https:\/\/roundwide.com\/wp-content\/uploads\/2021\/04\/SystemTrayApp.png\" alt=\"\" class=\"wp-image-868\" srcset=\"https:\/\/roundwide.com\/wp-content\/uploads\/2021\/04\/SystemTrayApp.png 682w, https:\/\/roundwide.com\/wp-content\/uploads\/2021\/04\/SystemTrayApp-300x90.png 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n\n\n\n<p>\u3053\u306e\u5b9f\u88c5\u306f\u4e8c\u3064\u306e\u7279\u5fb4\u304c\u3042\u308b\u3002\u307e\u305a\u3001\u3088\u304f\u4f7f\u308f\u308c\u3066\u3044\u308b<a rel=\"noreferrer noopener\" href=\"http:\/\/www.hardcodet.net\/wpf-notifyicon\" target=\"_blank\">WPF NotifyIcon<\/a>\u3092<strong>\u4f7f\u3063\u3066\u3044\u306a\u3044\u3002<\/strong>\u30e9\u30a4\u30bb\u30f3\u30b9\u306eCPOL\u304c\u3001\u3069\u306eOSS\u30e9\u30a4\u30bb\u30f3\u30b9\u3068\u3082\u4e92\u63db\u6027\u304c\u306a\u3044\u304b\u3089\u3060\u3002\u307e\u305f\u3001MVVM\u30d1\u30bf\u30fc\u30f3\u3092\u63a1\u7528\u3057\u3066\u3044\u3066<strong>\u30b3\u30fc\u30c9\u30d3\u30cf\u30a4\u30f3\u30c9\u304c\u306a\u3044\u3002<\/strong><\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">NotifyIcon\u306e\u30e9\u30c3\u30d1\u30fc<\/h2>\n\n\n\n<p>\u5b9f\u88c5\u306e\u4e2d\u5fc3\u3068\u306a\u308b\u306e\u306f\u3001WinForms\u306e<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.windows.forms.notifyicon?view=net-5.0\">NotifyIcon<\/a>\u30af\u30e9\u30b9\u306e\u30e9\u30c3\u30d1\u30fc\u306e <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/fujieda\/SystemTrayApp.WPF\/blob\/main\/SystemTrayApp.WPF\/NotifyIconWrapper.cs\" target=\"_blank\">NotifyIconWrapper<\/a>\u3067\u3042\u308b\u3002\u3053\u306e\u30e9\u30c3\u30d1\u30fc\u306f\u3001<code>ShowBaloonTip<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3059\u305f\u3081\u306e\u4f9d\u5b58\u30d7\u30ed\u30d1\u30c6\u30a3<code>NotifyRequest<\/code>\u3092\u6301\u3063\u3066\u3044\u308b\u3002<\/p>\n\n\n\n<pre><code class=\"lang-csharp\">private static readonly DependencyProperty NotifyRequestProperty =\n    DependencyProperty.Register(\"NotifyRequest\", typeof(NotifyRequestRecord), typeof(NotifyIconWrapper),\n        new PropertyMetadata(\n            (d, e) =&gt;\n            {\n                var r = (NotifyRequestRecord)e.NewValue;\n                ((NotifyIconWrapper)d)._notifyIcon?.\n                    <mark>ShowBalloonTip(r.Duration, r.Title, r.Text, r.Icon);<\/mark>\n            }));<\/code><\/pre>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3001\u3053\u306e<code>NotifyRequest<\/code>\u3092ViewModel\u306b\u30d0\u30a4\u30f3\u30c9\u3057\u3066<code>NotifyRequestRecord<\/code>\u3092\u8a2d\u5b9a\u3059\u308b\u3068\u3001\u4e0a\u306e<code>PropertyMetadata<\/code>\u3067\u5b9a\u7fa9\u3057\u305f\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u304c<code>ShowBaloonTip<\/code>\u3092\u30ec\u30b3\u30fc\u30c9\u306e\u4e2d\u8eab\u3092\u5f15\u6570\u306b\u3057\u3066\u547c\u3073\u51fa\u3059\u3002<\/p>\n\n\n\n<pre><code class=\"lang-csharp\">public NotifyIconWrapper.NotifyRequestRecord? NotifyRequest\n{\n    get =&gt; _notifyRequest;\n    set =&gt; SetProperty(ref _notifyRequest, value);\n}\n\nprivate void Notify(string message)\n{\n    <mark>NotifyRequest = new NotifyIconWrapper.NotifyRequestRecord<\/mark>\n    {\n        Title = \"Notify\",\n        Text = message,\n        Duration = 1000\n    };\n}\n<\/code><\/pre>\n\n\n\n<p>\u4ee5\u4e0b\u306f\u3001NotifyIconWrapper\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u3042\u308b\u3002\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3092\u547c\u3073\u51fa\u3057\u305f\u306e\u304cXAML\u30a8\u30c7\u30a3\u30bf\u3067\u306f\u306a\u3044\u5834\u5408\u306b\u3001\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u3092\u8a2d\u5b9a\u6e08\u307f\u306eNotifyIcon\u3068\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30e1\u30cb\u30e5\u30fc\u3092\u4f5c\u6210\u3059\u308b\u3002<\/p>\n\n\n\n<script type=\"text\/plain\" class=\"lang-csharp\">public NotifyIconWrapper()\n{\n    if (DesignerProperties.GetIsInDesignMode(this))\n        return;\n    _notifyIcon = new NotifyIcon\n    {\n        Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location),\n        Visible = true,\n        ContextMenuStrip = CreateContextMenu()\n    };\n    _notifyIcon.DoubleClick += OpenItemOnClick;\n    Application.Current.Exit += (obj, args) => { _notifyIcon.Dispose(); };\n}\n\nprivate ContextMenuStrip CreateContextMenu()\n{\n    var openItem = new ToolStripMenuItem(\"Open\");\n    openItem.Click += OpenItemOnClick;\n    var exitItem = new ToolStripMenuItem(\"Exit\");\n    exitItem.Click += ExitItemOnClick;\n    var contextMenu = new ContextMenuStrip {Items = {openItem, exitItem}};\n    return contextMenu;\n}\n<\/script>\n\n\n\n<p>\u4e0a\u306e\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u30fc<code>OpenItemOnClick<\/code>\u3068<code>ExitItemOnClick<\/code>\u306f\u3001NotifyIconWrapper\u306e\u5b9a\u7fa9\u3059\u308b\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30a4\u30d9\u30f3\u30c8<code>OpenSelected<\/code>\u3068<code>ExitSelected<\/code>\u3092\u767a\u751f\u3055\u305b\u308b\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u306eXAML\u306fNotifyIconWrapper\u306e\u4f7f\u3044\u65b9\u3092\u793a\u3057\u3066\u3044\u308b\u3002\u4f9d\u5b58\u30d7\u30ed\u30d1\u30c6\u30a3<code>NotifyRequest<\/code>\u3092VewModel\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306b\u30d0\u30a4\u30f3\u30c9\u3057\u3001\u5404\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30a4\u30d9\u30f3\u30c8\u3092Xaml.Behaviros.WPF\u306b\u3088\u3063\u3066\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30b3\u30de\u30f3\u30c9\u306b\u30d0\u30a4\u30f3\u30c9\u3057\u3066\u3044\u308b\u3002<\/p>\n\n\n\n<pre><code class=\"lang-xml\">&lt;Window x:Class=\"SystemTrayApp.WPF.MainWindow\"\n        xmlns:bh=\"http:\/\/schemas.microsoft.com\/xaml\/behaviors\"\n...\n    &lt;Grid&gt;\n        &lt;local:NotifyIconWrapper <mark>NotifyRequest=\"{Binding NotifyRequest<\/mark>}\"&gt;\n            &lt;bh:Interaction.Triggers&gt;\n                &lt;bh:EventTrigger EventName=\"<mark>OpenSelected<\/mark>\"&gt;\n                    &lt;bh:InvokeCommandAction Command=\"{Binding <mark>NotifyIconOpenCommand<\/mark>}\"&gt;\n                &lt;\/bh:EventTrigger&gt;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u30a6\u30a3\u30f3\u30c9\u30a6\u306e\u975e\u8868\u793a\u3068\u5fa9\u5143<\/h2>\n\n\n\n<p>\u30a6\u30a3\u30f3\u30c9\u30a6\u306e\u8868\u793a\u3068\u5fa9\u5143\u306f\u30c7\u30fc\u30bf\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3092\u901a\u3058\u3066\u884c\u3046\u3002\u4ee5\u4e0b\u306eXAML\u306f<code>WindowState<\/code>\u3068<code>ShowInTaskbar<\/code>\u3092ViewModel\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306b\u30d0\u30a4\u30f3\u30c9\u3057\u3066\u3044\u308b\u3002<\/p>\n\n\n\n<pre><code class=\"lang-xml\">&lt;Window x:Class=\"SystemTrayApp.WPF.MainWindow\"\n...\n        ShowInTaskbar=\"{Binding ShowInTaskbar}\"\n        WindowState=\"{Binding WindowState}\"\n        Title=\"SystemTrayApp\" Height=\"200\" Width=\"300\"&gt;\n<\/code><\/pre>\n\n\n\n<p>\u30a6\u30a3\u30f3\u30c9\u30a6\u304c\u6700\u5c0f\u5316\u3059\u308b\u3068\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u30d7\u30ed\u30d1\u30c6\u30a3<code>WindowState<\/code>\u304c\u5909\u5316\u3059\u308b\u306e\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306bset\u30a2\u30af\u30bb\u30b5\u30fc\u3067<code>ShowInTaskbar<\/code>\u3092false\u306b\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30bf\u30b9\u30af\u30d0\u30fc\u304b\u3089\u6d88\u3059\u3002\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u5fa9\u5143\u3059\u308b\u3068\u304d\u306b\u306f\u3001ViewModel\u3067<code>WindowState<\/code>\u306b<code>WindowState.Normal<\/code>\u3092\u8a2d\u5b9a\u3059\u308b\u3002<\/p>\n\n\n\n<pre><code class=\"lang-csharp\">public WindowState WindowState\n{\n    get =&gt; _windowState;\n    set\n    {\n        ShowInTaskbar = true;\n        SetProperty(ref _windowState, value);\n        ShowInTaskbar = value != WindowState.Minimized;\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>\u5947\u5999\u306a\u30ef\u30fc\u30af\u30a2\u30e9\u30a6\u30f3\u30c9<code>ShowInTaskbar = true<\/code>\u306f\u3001\u6700\u5c0f\u5316\u6642\u306b\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u306e\u6700\u4e0b\u90e8\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30bf\u30a4\u30c8\u30eb\u3060\u3051\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u304c\u6b8b\u308b\u306e\u3092\u9632\u3050\u305f\u3081\u3067\u3042\u308b\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"449\" height=\"221\" src=\"https:\/\/roundwide.com\/wp-content\/uploads\/2021\/04\/TitleOnlyWindow.png\" alt=\"A window consisting of only the titlebar leaves at the bottom of the screen.\" class=\"wp-image-843\" srcset=\"https:\/\/roundwide.com\/wp-content\/uploads\/2021\/04\/TitleOnlyWindow.png 449w, https:\/\/roundwide.com\/wp-content\/uploads\/2021\/04\/TitleOnlyWindow-300x148.png 300w\" sizes=\"auto, (max-width: 449px) 85vw, 449px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Loaded\u3068Closing\u30a4\u30d9\u30f3\u30c8<\/h2>\n\n\n\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8d77\u52d5\u6642\u306b\u30a6\u30a4\u30f3\u30c9\u30a6\u3092\u96a0\u3059\u51e6\u7406\u306f\u3001\u30a6\u30a3\u30f3\u30c9\u30a6\u306e<code>Loaded<\/code>\u30a4\u30d9\u30f3\u30c8\u3092\u30cf\u30f3\u30c9\u30eb\u3057\u3066\u884c\u3046\u3002\u4ee5\u4e0b\u306e\u30ea\u30b9\u30c8\u3067\u306f\u3001Xaml.Behavior.WPF\u3067<code>Loaded<\/code>\u30a4\u30d9\u30f3\u30c8\u3092\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30b3\u30de\u30f3\u30c9<code>LoadedCommand<\/code>\u306b\u30d0\u30a4\u30f3\u30c9\u3057\u3001\u305d\u3053\u3067<code>WindowState<\/code>\u306b<code>WindowState.Minimized<\/code>\u3092\u8a2d\u5b9a\u3057\u3066\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u96a0\u3057\u3066\u3044\u308b\u3002\u3053\u306e\u65b9\u6cd5\u3067\u306f\u3001\u8d77\u52d5\u6642\u306b\u4e00\u77ac\u30a6\u30a3\u30f3\u30c9\u30a6\u304c\u8868\u793a\u3055\u308c\u308b\u306e\u306f\u907f\u3051\u3089\u308c\u306a\u3044\u3002<\/p>\n\n\n\nXAML\n<script type=\"text\/plain\" class=\"lang-xml\"><bh:Interaction.Triggers>\n    <bh:EventTrigger EventName=\"Loaded\">\n        <bh:InvokeCommandAction Command=\"{Binding LoadedCommand}\"\/>\n    <\/bh:EventTrigger>\n<\/script>\nViewModel\n<script type=\"text\/plain\" class=\"lang-csharp\">\npublic MainWindowViewModel()\n{\n    LoadedCommand = new RelayCommand(Loaded);\n...\n}\n\npublic ICommand LoadedCommand { get; }\n\nprivate void Loaded()\n{\n    WindowState = WindowState.Minimized;\n}\n<\/script>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u304c\u30bf\u30a4\u30c8\u30eb\u30d0\u30fc\u306e\u30af\u30ed\u30fc\u30ba\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u305f\u3068\u304d\u306b\u306f\u3001\u30a6\u30a3\u30f3\u30c9\u30a6\u306e<code>Closing<\/code>\u30a4\u30d9\u30f3\u30c8\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u3066\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u7d42\u4e86\u3057\u3066\u3057\u307e\u3046\u306e\u3092\u907f\u3051\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u3002\u3053\u308c\u3092\u5b9f\u73fe\u3059\u308b\u306b\u306f\u3001\u30a4\u30d9\u30f3\u30c8\u5f15\u6570\u306e<code>Cancel<\/code>\u30d7\u30ed\u30d1\u30c6\u30a3\u3092true\u306b\u8a2d\u5b9a\u3059\u308c\u3070\u3088\u3044\u3002Xaml.Behavior.WPF\u306f<code>PassEventArgsToCommand<\/code>\u304ctrue\u306e\u3068\u304d\u306b\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30b3\u30de\u30f3\u30c9\u306b\u30a4\u30d9\u30f3\u30c8\u5f15\u6570\u3092\u6e21\u3059\u306e\u3067\u3001\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30b3\u30de\u30f3\u30c9\u3067\u305d\u308c\u3092\u884c\u3048\u308b\u3002<\/p>\n\n\n\nXAML\n<script type=\"text\/plain\" class=\"lang-xml\"><bh:Interaction.Triggers>\n...\n    <bh:EventTrigger EventName=\"Closing\">\n        <bh:InvokeCommandAction Command=\"{Binding ClosingCommand}\" PassEventArgsToCommand=\"True\"\/>\n    <\/bh:EventTrigger>\n<\/bh:Interaction.Triggers>\n<\/script>\nViewModel\n<script type=\"text\/plain\" class=\"lang-csharp\">public MainWindowViewModel()\n{\n...\n    ClosingCommand = new RelayCommand<CancelEventArgs>(Closing);\n...\n}\n\npublic ICommand CloasingCommand { get; }\n\nprivate void Closing(CancelEventArgs? e)\n{\n    if (e == null)\n        return;\n    e.Cancel = true;\n    WindowState = WindowState.Minimized;\n}\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\">\u307e\u3068\u3081<\/h2>\n\n\n\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001\u3053\u306e<a href=\"https:\/\/github.com\/fujieda\/SystemTrayApp.WPF\/tree\/main\/SystemTrayApp.WPF\">GitHub\u30ea\u30dd\u30b8\u30c8\u30ea<\/a>\u306b\u3042\u308b\u30b7\u30b9\u30c6\u30e0\u30c8\u30ec\u30a4\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u305f\u3002\u3053\u306e\u5b9f\u88c5\u306f<a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/communitytoolkit\/mvvm\/introduction\">Microsoft.Toolkit.Mvvm<\/a>\u306b\u4f9d\u5b58\u3057\u3066\u3044\u308b\u304c\u3001\u305d\u306e\u4ed6\u306eMVVM\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u79fb\u690d\u3059\u308b\u306e\u306f\u5bb9\u6613\u306a\u306f\u305a\u3060\u3002\u30b3\u30fc\u30c9\u306e\u30e9\u30a4\u30bb\u30f3\u30b9\u306f<a href=\"https:\/\/choosealicense.com\/licenses\/0bsd\/\">0BSD<\/a>\u3067\u3042\u308a\u3001\u30d1\u30d6\u30ea\u30c3\u30af\u30c9\u30e1\u30a4\u30f3\u3068\u540c\u3058\u3067\u3042\u308b\u3002\u30b7\u30b9\u30c6\u30e0\u30c8\u30ec\u30a4\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u308b\u3068\u304d\u306b\u306f\u3001\u3053\u306e\u30b3\u30fc\u30c9\u3092\u6c17\u8efd\u306b\u4f7f\u3063\u3066\u307b\u3057\u3044\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001WPF\u3068MVVM\u3068\u306b\u3088\u308b\u30b7\u30b9\u30c6\u30e0\u30c8\u30ec\u30a4\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e00\u5b9f\u88c5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3059\u308b\u3002\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u5168\u4f53\u306fGitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u3042\u308b\u3002 \u3053\u306e\u5b9f\u88c5\u306f\u4e8c\u3064\u306e\u7279\u5fb4\u304c\u3042\u308b\u3002\u307e\u305a\u3001\u3088\u304f\u4f7f\u308f\u308c\u3066\u3044\u308bWPF NotifyIco &hellip; <a href=\"https:\/\/roundwide.com\/ja\/implementing-system-tray-app-with-wpf-and-mvvm\/\" class=\"more-link\"><span class=\"screen-reader-text\">\"\u30b7\u30b9\u30c6\u30e0\u30c8\u30ec\u30a4\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092WPF\u3068MVVM\u3067\u5b9f\u88c5\u3059\u308b\" \u306e<\/span>\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"ja","_original_post":"https:\/\/roundwide.com\/?p=777","footnotes":""},"categories":[10,11],"tags":[],"class_list":["post-777","post","type-post","status-publish","format-standard","hentry","category-csharp","category-wpf","ja"],"_links":{"self":[{"href":"https:\/\/roundwide.com\/wp-json\/wp\/v2\/posts\/777","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/roundwide.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/roundwide.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/roundwide.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/roundwide.com\/wp-json\/wp\/v2\/comments?post=777"}],"version-history":[{"count":17,"href":"https:\/\/roundwide.com\/wp-json\/wp\/v2\/posts\/777\/revisions"}],"predecessor-version":[{"id":984,"href":"https:\/\/roundwide.com\/wp-json\/wp\/v2\/posts\/777\/revisions\/984"}],"wp:attachment":[{"href":"https:\/\/roundwide.com\/wp-json\/wp\/v2\/media?parent=777"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/roundwide.com\/wp-json\/wp\/v2\/categories?post=777"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/roundwide.com\/wp-json\/wp\/v2\/tags?post=777"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}