{"id":75,"date":"2010-11-22T14:46:54","date_gmt":"2010-11-22T09:16:54","guid":{"rendered":"http:\/\/techtwaddle.net\/?p=75"},"modified":"2011-01-27T10:49:17","modified_gmt":"2011-01-27T05:19:17","slug":"windows-phone-7-ui-control-boundaries","status":"publish","type":"post","link":"https:\/\/techtwaddle.co.in\/blog\/2010\/11\/22\/windows-phone-7-ui-control-boundaries\/","title":{"rendered":"Windows Phone 7 : UI Control Boundaries"},"content":{"rendered":"<p align=\"justify\">I was working on an application at work when I needed to figure out a really trivial case, well, trivial in theory at least. All I wanted to know was if a button was completely inside a rectangle. Could anything else be simpler you think. Just check the button bounds against the rectangle bounds,<\/p>\n<p><strong>pseudocode<\/strong>    <br \/>\n<font color=\"#800000\">if (Button.Top &gt; Rectangle.Top &amp;&amp;     <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Button.Left &gt; Rectangle.Left &amp;&amp;      <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Button.Right &lt; Rectangle.Right &amp;&amp;      <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Button.Bottom &lt; Rectangle.Bottom)      <br \/>\n{      <br \/>\n&nbsp;&nbsp;&nbsp; \/\/Button is inside rectangle      <br \/>\n}<\/font><\/p>\n<p align=\"justify\">the Right and Bottom of the Button and Rectangle can be calculated using the Width and the Height properties of each. You&rsquo;d expect this to work correctly, but as far as Windows Phone 7 is concerned there is only one caveat.<\/p>\n<p align=\"justify\">I wrote up a simple application to illustrate this. Create a Windows Phone 7 Silverlight application and add the following to the <font color=\"#004080\">ContentPanel<\/font> grid in Mainpage.xaml,<\/p>\n<div class=\"le-cah-container\">\n<div style=\"background-color: rgb(221, 221, 221); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">\n<ol style=\"margin: 0px 0px 0px 2em; padding: 0px 0px 0px 5px; background-color: rgb(255, 255, 255); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">\n<li>&lt;<span style=\"color: rgb(43, 145, 175);\">Grid<\/span> x:Name=<span style=\"color: rgb(163, 21, 21);\">&quot;ContentPanel&quot;<\/span> <span style=\"color: rgb(43, 145, 175);\">Grid<\/span>.Row=<span style=\"color: rgb(163, 21, 21);\">&quot;1&quot;<\/span>&gt;<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">&nbsp;&nbsp;&nbsp; &lt;<span style=\"color: rgb(43, 145, 175);\">Canvas<\/span> x:Name=<span style=\"color: rgb(163, 21, 21);\">&quot;MainCanvas&quot;<\/span> <span style=\"color: rgb(43, 145, 175);\">HorizontalAlignment<\/span>=<span style=\"color: rgb(163, 21, 21);\">&quot;Stretch&quot;<\/span> VerticalAlignment=<span style=\"color: rgb(163, 21, 21);\">&quot;Stretch&quot;<\/span>&gt;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;TextBlock x:Name=<span style=\"color: rgb(163, 21, 21);\">&quot;RectangleTop&quot;<\/span> <span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>.Top=<span style=\"color: rgb(163, 21, 21);\">&quot;0&quot;<\/span> \/&gt;<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;TextBlock x:Name=<span style=\"color: rgb(163, 21, 21);\">&quot;ButtonTop&quot;<\/span> <span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>.Top=<span style=\"color: rgb(163, 21, 21);\">&quot;30&quot;<\/span> \/&gt;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<span style=\"color: rgb(43, 145, 175);\">Rectangle<\/span> x:Name=<span style=\"color: rgb(163, 21, 21);\">&quot;ColoredRectangle&quot;<\/span> Width=<span style=\"color: rgb(163, 21, 21);\">&quot;480&quot;<\/span> Height=<span style=\"color: rgb(163, 21, 21);\">&quot;150&quot;<\/span> Fill=<span style=\"color: rgb(163, 21, 21);\">&quot;Coral&quot;<\/span> Opacity=<span style=\"color: rgb(163, 21, 21);\">&quot;0.4&quot;<\/span> <span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>.Top=<span style=\"color: rgb(163, 21, 21);\">&quot;150&quot;<\/span> <span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>.Left=<span style=\"color: rgb(163, 21, 21);\">&quot;0&quot;<\/span>\/&gt;<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<span style=\"color: rgb(43, 145, 175);\">Button<\/span> x:Name=<span style=\"color: rgb(163, 21, 21);\">&quot;MyButton&quot;<\/span> Content=<span style=\"color: rgb(163, 21, 21);\">&quot;Move Me&quot;<\/span> <span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>.Top=<span style=\"color: rgb(163, 21, 21);\">&quot;400&quot;<\/span> <span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>.Left=<span style=\"color: rgb(163, 21, 21);\">&quot;160&quot;<\/span> Background=<span style=\"color: rgb(163, 21, 21);\">&quot;Purple&quot;<\/span>\/&gt;<\/li>\n<li>&nbsp;&nbsp;&nbsp; &lt;\/<span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">&lt;\/<span style=\"color: rgb(43, 145, 175);\">Grid<\/span>&gt;<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<p>\nthe constructor of <font color=\"#004080\">Mainpage<\/font> looks like this,<\/p>\n<div class=\"le-cah-container\">\n<div style=\"background-color: rgb(221, 221, 221); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">\n<ol style=\"margin: 0px 0px 0px 2em; padding: 0px 0px 0px 5px; background-color: rgb(255, 255, 255); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">\n<li><span style=\"color: rgb(0, 0, 255);\">public<\/span> MainPage()<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">{<\/li>\n<li>&nbsp;&nbsp;&nbsp; InitializeComponent();<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp; MyButton.ManipulationDelta += <span style=\"color: rgb(0, 0, 255);\">new<\/span> <span style=\"color: rgb(43, 145, 175);\">EventHandler<\/span>&lt;<span style=\"color: rgb(43, 145, 175);\">ManipulationDeltaEventArgs<\/span>&gt;(OnMyButtonManipulationDelta);<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp; RectangleTop.Text = <span style=\"color: rgb(43, 145, 175);\">String<\/span>.Format(<span style=\"color: rgb(163, 21, 21);\">&quot;Rectangle Top: {0}&quot;<\/span>, <span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>.GetTop(ColoredRectangle));<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">&nbsp;&nbsp;&nbsp; ButtonTop.Text = <span style=\"color: rgb(43, 145, 175);\">String<\/span>.Format(<span style=\"color: rgb(163, 21, 21);\">&quot;Button Top: {0}&quot;<\/span>, <span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>.GetTop(MyButton));<\/li>\n<li>}<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<p>\nWe register for the <font color=\"#004080\">ManipulationDelta<\/font> event on the button and update the Text on the two Textblocks to show the Top properties of the rectangle and the button, if you run the program this is how the application will look,<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"272\" height=\"484\" border=\"0\" style=\"border: 0px none; display: inline;\" title=\"FirstScreen\" alt=\"FirstScreen\" src=\"http:\/\/geekswithblogs.net\/images\/geekswithblogs_net\/TechTwaddle\/WindowsLiveWriter\/WindowsPhone7UIControlBoundaries_136CF\/FirstScreen.jpg\" \/><\/p>\n<p align=\"justify\">The <font color=\"#004080\">OnMyButtonManipulationDelta()<\/font> function will be called whenever a <font color=\"#004080\">ManipulationDelta<\/font> event occurs on the <font color=\"#004080\">MyButton <\/font>control, which happens when the user clicks and drags the button around. Here we want to move the button along with the users drag,<\/p>\n<div class=\"le-cah-container\">\n<div style=\"background-color: rgb(221, 221, 221); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">\n<ol style=\"margin: 0px 0px 0px 2.5em; padding: 0px 0px 0px 5px; background-color: rgb(255, 255, 255); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">\n<li><span style=\"color: rgb(0, 0, 255);\">void<\/span> OnMyButtonManipulationDelta(<span style=\"color: rgb(0, 0, 255);\">object<\/span> sender, <span style=\"color: rgb(43, 145, 175);\">ManipulationDeltaEventArgs<\/span> e)<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">{<\/li>\n<li>&nbsp;&nbsp;&nbsp; <span style=\"color: rgb(0, 0, 255);\">double<\/span> deltaX = e.DeltaManipulation.Translation.X;<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">&nbsp;&nbsp;&nbsp; <span style=\"color: rgb(0, 0, 255);\">double<\/span> deltaY = e.DeltaManipulation.Translation.Y;<\/li>\n<li>&nbsp;<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">&nbsp;&nbsp;&nbsp; <span style=\"color: rgb(0, 0, 255);\">double<\/span> btnX = <span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>.GetLeft(MyButton);<\/li>\n<li>&nbsp;&nbsp;&nbsp; <span style=\"color: rgb(0, 0, 255);\">double<\/span> btnY = <span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>.GetTop(MyButton);<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp; btnX += deltaX;<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">&nbsp;&nbsp;&nbsp; btnY += deltaY;<\/li>\n<li>&nbsp;<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">&nbsp;&nbsp;&nbsp; <span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>.SetLeft(MyButton, btnX);<\/li>\n<li>&nbsp;&nbsp;&nbsp; <span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>.SetTop(MyButton, btnY);<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp; ButtonTop.Text = <span style=\"color: rgb(43, 145, 175);\">String<\/span>.Format(<span style=\"color: rgb(163, 21, 21);\">&quot;Button Top: {0}&quot;<\/span>, <span style=\"color: rgb(43, 145, 175);\">Canvas<\/span>.GetTop(MyButton));<\/li>\n<li style=\"background-color: rgb(243, 243, 243); background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;\">}<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<p>\nIn this function we get the delta manipulation values along the X and Y axis and add it to the Buttons Left and Top property, this makes sure that the button control moves along with the users finger when he\/she clicks and drags the button.<\/p>\n<p align=\"justify\">Now when we move the button and place it inside the rectangle the values on the textblocks update,<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"272\" height=\"484\" border=\"0\" style=\"border: 0px none; display: inline;\" title=\"ButtonInsideRect\" alt=\"ButtonInsideRect\" src=\"http:\/\/geekswithblogs.net\/images\/geekswithblogs_net\/TechTwaddle\/WindowsLiveWriter\/WindowsPhone7UIControlBoundaries_136CF\/ButtonInsideRect.jpg\" \/><\/p>\n<p align=\"justify\">\nThings are fine till here, but they start getting interesting when you move the button to the top of the rectangle,<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"272\" height=\"484\" border=\"0\" style=\"border: 0px none; display: inline;\" title=\"ButtonTopLessThanRectTop\" alt=\"ButtonTopLessThanRectTop\" src=\"http:\/\/geekswithblogs.net\/images\/geekswithblogs_net\/TechTwaddle\/WindowsLiveWriter\/WindowsPhone7UIControlBoundaries_136CF\/ButtonTopLessThanRectTop.jpg\" \/><\/p>\n<p align=\"justify\">\nthe Button control appears to be well inside the Rectangle but the Top property of the button is <strong>144<\/strong> where as that of the Rectangle is <strong>150<\/strong>. The values suggest that the button is outside the rectangle!<\/p>\n<p align=\"justify\">This happens because there is more to a button control than what meets the eyes. The button is not confined within the white rectangular boundary but is much bigger than that. When you drag and drop a button control using the visual editor in Visual Studio, the area of the button that is selected is bigger than the button itself, (see image below)<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"365\" height=\"256\" border=\"0\" style=\"border: 0px none; display: inline;\" title=\"ButtonControlSelected\" alt=\"ButtonControlSelected\" src=\"http:\/\/geekswithblogs.net\/images\/geekswithblogs_net\/TechTwaddle\/WindowsLiveWriter\/WindowsPhone7UIControlBoundaries_136CF\/ButtonControlSelected.jpg\" \/><\/p>\n<p align=\"justify\">\nThis is intentional and done to make sure that the target area for the user is a bit larger than the control itself so that the control can be selected easily without requiring too much precision. This, of course, is a nice feature (ask anyone who has tried using a Windows Mobile touch screen device with a finger ;)<\/p>\n<p align=\"justify\">Placing the Button control precisely on top of the rectangle like below,<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"272\" height=\"484\" border=\"0\" style=\"border: 0px none; display: inline;\" title=\"ButtonOnTopOfRect\" alt=\"ButtonOnTopOfRect\" src=\"http:\/\/geekswithblogs.net\/images\/geekswithblogs_net\/TechTwaddle\/WindowsLiveWriter\/WindowsPhone7UIControlBoundaries_136CF\/ButtonOnTopOfRect_1.jpg\" \/><\/p>\n<p align=\"justify\">reveals that there are <strong>12 extra pixels<\/strong> on all sides of the button control. (<strong>rectangle top = 150,&nbsp; button top = 138<\/strong>)<\/p>\n<p align=\"justify\">So that is all in this post. In the next post we&rsquo;ll see how easy it is to pick a button control and flick it, the button will bounce around the screen and come to a halt gradually. Refreshing old memories of marbles ;)<\/p>\n<p>&nbsp;<\/p>\n<p>Post attachments   <br \/>\nSource Code: <a href=\"http:\/\/cid-65187cfbc4ac6ad2.office.live.com\/self.aspx\/.Public\/SourceCode\/ButtonBoundaries.zip\">ButtonBoundaries.zip<\/a><\/p>\n<p><strong>Update:<\/strong><br \/>\nI forgot to add that the same case is also true for textbox and password box control<\/p>\n<p><strong>Update 2<\/strong><br \/>\nI just recorded a short video of the application in action,<\/p>\n<p><object width=\"480\" height=\"385\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/11oCwcRBAoQ?fs=1&amp;hl=en_US&amp;color1=0x3a3a3a&amp;color2=0x999999\" \/><param name=\"allowFullScreen\" value=\"true\" \/><param name=\"allowscriptaccess\" value=\"always\" \/><\/object><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I was working on an application at work when I needed to figure out a really trivial case, well, trivial in theory at least. All I wanted to know was if a button was completely inside a rectangle. Could anything else be simpler you think. Just check the button bounds against the rectangle bounds, pseudocode &hellip; <a href=\"https:\/\/techtwaddle.co.in\/blog\/2010\/11\/22\/windows-phone-7-ui-control-boundaries\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Windows Phone 7 : UI Control Boundaries<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[1],"tags":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p1ktFF-1d","_links":{"self":[{"href":"https:\/\/techtwaddle.co.in\/blog\/wp-json\/wp\/v2\/posts\/75"}],"collection":[{"href":"https:\/\/techtwaddle.co.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techtwaddle.co.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techtwaddle.co.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/techtwaddle.co.in\/blog\/wp-json\/wp\/v2\/comments?post=75"}],"version-history":[{"count":2,"href":"https:\/\/techtwaddle.co.in\/blog\/wp-json\/wp\/v2\/posts\/75\/revisions"}],"predecessor-version":[{"id":127,"href":"https:\/\/techtwaddle.co.in\/blog\/wp-json\/wp\/v2\/posts\/75\/revisions\/127"}],"wp:attachment":[{"href":"https:\/\/techtwaddle.co.in\/blog\/wp-json\/wp\/v2\/media?parent=75"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techtwaddle.co.in\/blog\/wp-json\/wp\/v2\/categories?post=75"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techtwaddle.co.in\/blog\/wp-json\/wp\/v2\/tags?post=75"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}