{"id":37737,"date":"2024-11-01T10:00:01","date_gmt":"2024-11-01T10:00:01","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=37737"},"modified":"2024-11-01T11:03:56","modified_gmt":"2024-11-01T11:03:56","slug":"wpf-development-control-status","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/37737\/","title":{"rendered":"WPF Development, Control Status"},"content":{"rendered":"<p><body><\/p>\n<p>\n    Windows Presentation Foundation (WPF) is a powerful platform that is part of the .NET Framework for building complex user interfaces. In WPF, managing the states of controls plays an important role for developers when creating user interfaces. This article will detail how to manage control states in WPF along with example code.\n<\/p>\n<h2>1. Overview of State Management in WPF<\/h2>\n<p>\n    WPF provides various methods to manage the state of each control. A state refers to the visual representation of a control that can change based on user actions or the state of the UI. For instance, a button control has a normal state, a hover state when the mouse is over it, and a pressed state when clicked.\n<\/p>\n<h2>2. Notation and Programming of States<\/h2>\n<p>\n    In WPF, you can define and transition control states using the <strong>Visual State Manager (VSM)<\/strong>. By using the VSM, states can be visually defined and transitions can be implemented as animations. The following is an example of how to set the state of a button using VSM.\n<\/p>\n<h3>2.1 Visual State Manager Example<\/h3>\n<pre><code>\n<button content=\"Click Me!\" x:name=\"MyButton\">\n    <button.style>\n        <style targettype=\"Button\">\n            <Setter Property=\"Template\">\n                <Setter.Value>\n                    <ControlTemplate TargetType=\"Button\">\n                        <Grid>\n                            <VisualStateManager.VisualStateGroups>\n                                <VisualStateGroup x:Name=\"CommonStates\">\n                                    <VisualState x:Name=\"Normal\" \/>\n                                    <VisualState x:Name=\"MouseOver\">\n                                        <Storyboard>\n                                            <DoubleAnimation \n                                                Storyboard.TargetName=\"MyButton\" \n                                                Storyboard.TargetProperty=\"Opacity\" \n                                                To=\"0.5\" \n                                                Duration=\"0:0:0.2\" \/>\n                                        <\/Storyboard>\n                                    <\/VisualState>\n                                    <VisualState x:Name=\"Pressed\">\n                                        <Storyboard>\n                                            <DoubleAnimation \n                                                Storyboard.TargetName=\"MyButton\" \n                                                Storyboard.TargetProperty=\"ScaleTransform.ScaleX\" \n                                                To=\"0.8\" \n                                                Duration=\"0:0:0.1\" \/>\n                                            <DoubleAnimation \n                                                Storyboard.TargetName=\"MyButton\" \n                                                Storyboard.TargetProperty=\"ScaleTransform.ScaleY\" \n                                                To=\"0.8\" \n                                                Duration=\"0:0:0.1\" \/>\n                                        <\/Storyboard>\n                                    <\/VisualState>\n                                <\/VisualStateGroup>\n                            <\/VisualStateManager.VisualStateGroups>\n                            <Ellipse x:Name=\"MyEllipse\" Fill=\"Blue\" Width=\"100\" Height=\"100\">\n                                <Ellipse.RenderTransform>\n                                    <ScaleTransform ScaleX=\"1\" ScaleY=\"1\" \/>\n                                <\/Ellipse.RenderTransform>\n                            <\/Ellipse>\n                        <\/Grid>\n                    <\/ControlTemplate>\n                <\/Setter.Value>\n            <\/Setter>\n        <\/style>\n    <\/button.style>\n<\/button>\n<\/code><\/pre>\n<p>\n    In this example, the button&#8217;s states are defined as Normal, MouseOver, and Pressed. Each state is given animation effects using the <strong>Storyboard<\/strong>.\n<\/p>\n<h2>3. Custom States<\/h2>\n<p>\n    In WPF, you can create custom states in addition to those provided by default controls. This is particularly useful for creating complex custom controls. The following example shows how to add states to a custom control.\n<\/p>\n<h3>3.1 Custom Control Example<\/h3>\n<pre><code>\npublic class CustomButton : Button\n{\n    static CustomButton()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomButton), new FrameworkPropertyMetadata(typeof(CustomButton)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n        VisualStateManager.GoToState(this, \"Normal\", true);\n    }\n\n    private void OnMouseEnter(object sender, MouseEventArgs e)\n    {\n        VisualStateManager.GoToState(this, \"MouseOver\", true);\n    }\n\n    private void OnMouseLeave(object sender, MouseEventArgs e)\n    {\n        VisualStateManager.GoToState(this, \"Normal\", true);\n    }\n\n    protected override void OnClick()\n    {\n        VisualStateManager.GoToState(this, \"Pressed\", true);\n        base.OnClick();\n    }\n}\n<\/code><\/pre>\n<p>\n    This class is implemented to allow the button to transition to different visual states based on mouse state while maintaining its basic functionality. Each state transition is handled using <code>VisualStateManager<\/code>.\n<\/p>\n<h2>4. States and Data Binding<\/h2>\n<p>\n    In WPF, states can be combined with data to dynamically update the UI. By changing states through data binding, the UI is immediately updated. The following is an example of state management using data binding.\n<\/p>\n<h3>4.1 Data Binding Example<\/h3>\n<pre><code>\n<window height=\"350\" title=\"MainWindow\" width=\"525\" x:class=\"WpfApp.MainWindow\" xmlns=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\" xmlns:x=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\">\n    <grid>\n        <button click=\"Button_Click\" content=\"Change State\"><\/button>\n        <textblock text=\"{Binding Status}\"><\/textblock>\n    <\/grid>\n<\/window>\n<\/code><\/pre>\n<pre><code>\npublic partial class MainWindow : Window, INotifyPropertyChanged\n{\n    private string status;\n    public string Status\n    {\n        get => status;\n        set\n        {\n            status = value;\n            OnPropertyChanged(\"Status\");\n        }\n    }\n\n    public MainWindow()\n    {\n        InitializeComponent();\n        DataContext = this;\n    }\n\n    private void Button_Click(object sender, RoutedEventArgs e)\n    {\n        Status = \"The button has been clicked.\";\n    }\n\n    public event PropertyChangedEventHandler PropertyChanged;\n    protected void OnPropertyChanged(string propertyName)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n}\n<\/code><\/pre>\n<p>\n    In the example above, every time the button is clicked, the <code>Status<\/code> property changes, and that change is immediately reflected in the UI. Through data binding, control states can be effectively managed.\n<\/p>\n<h2>5. Complex State Management<\/h2>\n<p>\n    Sometimes, not only simple states but also complex transitions and animations may be required. WPF can utilize the <strong>Visual State Manager<\/strong> for these cases as well. By combining complex states and animations, you can enhance the user&#8217;s experience.\n<\/p>\n<h3>5.1 Complex State Example<\/h3>\n<pre><code>\n<controltemplate targettype=\"CustomControl\">\n    <grid>\n        <visualstatemanager.visualstategroups>\n            <visualstategroup x:name=\"States\">\n                <visualstate x:name=\"StateA\">\n                    <storyboard>\n                        <doubleanimation duration=\"0:0:0.5\" storyboard.targetname=\"PartRectangle\" storyboard.targetproperty=\"Opacity\" to=\"1\"><\/doubleanimation>\n                    <\/storyboard>\n                <\/visualstate>\n                <visualstate x:name=\"StateB\">\n                    <storyboard>\n                        <doubleanimation duration=\"0:0:0.5\" storyboard.targetname=\"PartRectangle\" storyboard.targetproperty=\"Opacity\" to=\"0.5\"><\/doubleanimation>\n                    <\/storyboard>\n                <\/visualstate>\n            <\/visualstategroup>\n        <\/visualstatemanager.visualstategroups>\n        <rectangle fill=\"Red\" height=\"100\" width=\"100\" x:name=\"PartRectangle\"><\/rectangle>\n    <\/grid>\n<\/controltemplate>\n<\/code><\/pre>\n<p>\n    This custom control has two states (StateA, StateB) and animates the opacity of a Rectangle in each state.\n<\/p>\n<h2>6. Summary<\/h2>\n<p>\n    Managing control states in WPF is an important element that enhances the user experience. By utilizing the Visual State Manager, you can easily manage the states of each control and express state transitions as animations. Creating custom controls and dynamically updating the UI through data binding are key techniques in WPF development.\n<\/p>\n<p>\n    Through this article, you have gained an understanding of the concepts of control state management in WPF and explored various practical methods. This knowledge will be very useful when developing complex applications.\n<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Windows Presentation Foundation (WPF) is a powerful platform that is part of the .NET Framework for building complex user interfaces. In WPF, managing the states of controls plays an important role for developers when creating user interfaces. This article will detail how to manage control states in WPF along with example code. 1. Overview of &hellip; <a href=\"https:\/\/atmokpo.com\/w\/37737\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;WPF Development, Control Status&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[117],"tags":[],"class_list":["post-37737","post","type-post","status-publish","format-standard","hentry","category-wpf-programming"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>WPF Development, Control Status - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/37737\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WPF Development, Control Status - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Windows Presentation Foundation (WPF) is a powerful platform that is part of the .NET Framework for building complex user interfaces. In WPF, managing the states of controls plays an important role for developers when creating user interfaces. This article will detail how to manage control states in WPF along with example code. 1. Overview of &hellip; \ub354 \ubcf4\uae30 &quot;WPF Development, Control Status&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/37737\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T10:00:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:03:56+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/37737\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37737\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"WPF Development, Control Status\",\"datePublished\":\"2024-11-01T10:00:01+00:00\",\"dateModified\":\"2024-11-01T11:03:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37737\/\"},\"wordCount\":490,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"WPF Programming\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/37737\/\",\"url\":\"https:\/\/atmokpo.com\/w\/37737\/\",\"name\":\"WPF Development, Control Status - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T10:00:01+00:00\",\"dateModified\":\"2024-11-01T11:03:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37737\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/37737\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/37737\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WPF Development, Control Status\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WPF Development, Control Status - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/37737\/","og_locale":"ko_KR","og_type":"article","og_title":"WPF Development, Control Status - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Windows Presentation Foundation (WPF) is a powerful platform that is part of the .NET Framework for building complex user interfaces. In WPF, managing the states of controls plays an important role for developers when creating user interfaces. This article will detail how to manage control states in WPF along with example code. 1. Overview of &hellip; \ub354 \ubcf4\uae30 \"WPF Development, Control Status\"","og_url":"https:\/\/atmokpo.com\/w\/37737\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T10:00:01+00:00","article_modified_time":"2024-11-01T11:03:56+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"3\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/37737\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/37737\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"WPF Development, Control Status","datePublished":"2024-11-01T10:00:01+00:00","dateModified":"2024-11-01T11:03:56+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/37737\/"},"wordCount":490,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["WPF Programming"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/37737\/","url":"https:\/\/atmokpo.com\/w\/37737\/","name":"WPF Development, Control Status - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T10:00:01+00:00","dateModified":"2024-11-01T11:03:56+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/37737\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/37737\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/37737\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"WPF Development, Control Status"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37737","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=37737"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37737\/revisions"}],"predecessor-version":[{"id":37738,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37737\/revisions\/37738"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=37737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=37737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=37737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}