{"id":767,"date":"2017-12-23T22:24:07","date_gmt":"2017-12-23T19:24:07","guid":{"rendered":"http:\/\/enisnecipoglu.com\/?p=767"},"modified":"2018-02-03T21:52:14","modified_gmt":"2018-02-03T18:52:14","slug":"xamarin-forms-material-cards-and-animated-detail-page","status":"publish","type":"post","link":"https:\/\/enisnecipoglu.com\/en\/xamarin-forms-material-cards-and-animated-detail-page\/","title":{"rendered":"Xamarin Forms Material Cards and Animated Detail Page"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p>Hello Dear!<\/p>\n<p>There is a project about Material Style Xamarin Forms Card with XAML. It will look like that:<\/p>\n<p><img loading=\"lazy\" class=\"size-full wp-image-768 alignleft\" src=\"http:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/materialForms.gif\" alt=\"Material Design Xamarin Forms\" width=\"480\" height=\"276\" \/><\/p>\n<p>Let&#8217;s Start<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1>Material Cards with XAML<\/h1>\n<p>Before we start, firstly we need to know\u00a0<strong>Frame<\/strong> control in XF has a shadow. We can use Frame to create our card.\u00a0<strong>Frame<\/strong>s has 20 Padding as Default. If you have some problems with it\u00a0 check your padding is zero or not.<\/p>\n<p><img loading=\"lazy\" class=\" alignleft\" src=\"https:\/\/storage.googleapis.com\/material-design\/publish\/material_v_12\/assets\/0Bzhp5Z4wHba3WFBLZjBNNGpnQzg\/components-cards1.png\" width=\"315\" height=\"176\" \/>Our first Card will be look like that &#8220;Kangaroo Valley Safari card in that <a href=\"https:\/\/material.io\/guidelines\/components\/cards.html#cards-usage\">link<\/a>.<\/p>\n<p>So we need a Frame and some more componenets. Let&#8217;s start with a creating a Control in different file. We can use our little card in different project later. Create a Controls Folder in PCL project and Created a XAML component.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>This is our logic:<\/p>\n<p><img loading=\"lazy\" class=\"wp-image-769 alignnone\" src=\"http:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/frameView0.png\" alt=\"Xamarin Forms Material Cards\" width=\"410\" height=\"206\" srcset=\"https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/frameView0.png 992w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/frameView0-300x151.png 300w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/frameView0-768x386.png 768w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/frameView0-600x301.png 600w\" sizes=\"(max-width: 410px) 100vw, 410px\" \/> <img loading=\"lazy\" class=\"wp-image-770 alignnone\" src=\"http:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/frameView1.png\" alt=\"Xamarin Forms Material Desing Material Cards\" width=\"436\" height=\"215\" srcset=\"https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/frameView1.png 1010w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/frameView1-300x148.png 300w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/frameView1-768x379.png 768w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/frameView1-600x296.png 600w\" sizes=\"(max-width: 436px) 100vw, 436px\" \/><\/p>\n<p>So our XAML is look like:<\/p>\n<div class=\"codecolorer-container html4strict default\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><div class=\"html4strict codecolorer\"><span class=\"sc-1\">&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?--&gt;<\/span><br \/>\n<br \/>\n<span class=\"sc2\">&lt;<span class=\"kw2\">label<\/span>&gt;&lt;<span class=\"sy0\">\/<\/span><span class=\"kw2\">label<\/span>&gt;<\/span><br \/>\n<span class=\"sc2\">&lt;<span class=\"kw2\">label<\/span>&gt;&lt;<span class=\"sy0\">\/<\/span><span class=\"kw2\">label<\/span>&gt;<\/span><br \/>\n<span class=\"sc2\">&lt;<span class=\"kw2\">label<\/span>&gt;&lt;<span class=\"sy0\">\/<\/span><span class=\"kw2\">label<\/span>&gt;<\/span><br \/>\n<br \/>\n<span class=\"sc2\">&lt;<span class=\"kw2\">label<\/span>&gt;&lt;<span class=\"sy0\">\/<\/span><span class=\"kw2\">label<\/span>&gt;<\/span><br \/>\n<span class=\"sc2\">&lt;<span class=\"kw2\">label<\/span>&gt;&lt;<span class=\"sy0\">\/<\/span><span class=\"kw2\">label<\/span>&gt;<\/span><\/div><\/div>\n<p>And we need something to add with CS like giving a ratio to our image (16:9)<\/p>\n<p>Cs file will be like:<\/p>\n<div class=\"codecolorer-container csharp default\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><div class=\"csharp codecolorer\"><span class=\"kw1\">public<\/span> <span class=\"kw1\">partial<\/span> <span class=\"kw4\">class<\/span> CardView <span class=\"sy0\">:<\/span> Frame<br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">public<\/span> CardView<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\nInitializeComponent<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">protected<\/span> <span class=\"kw1\">override<\/span> <span class=\"kw4\">void<\/span> OnSizeAllocated<span class=\"br0\">&#40;<\/span><span class=\"kw4\">double<\/span> width, <span class=\"kw4\">double<\/span> height<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">base<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">OnSizeAllocated<\/span><span class=\"br0\">&#40;<\/span>width, height<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nboxCardColor<span class=\"sy0\">.<\/span><span class=\"me1\">HeightRequest<\/span> <span class=\"sy0\">=<\/span> boxCardColor<span class=\"sy0\">.<\/span><span class=\"me1\">Width<\/span> <span class=\"sy0\">\/<\/span> <span class=\"nu0\">16<\/span> <span class=\"sy0\">*<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">;<\/span><br \/>\nimgCard<span class=\"sy0\">.<\/span><span class=\"me1\">HeightRequest<\/span> <span class=\"sy0\">=<\/span> imgCard<span class=\"sy0\">.<\/span><span class=\"me1\">Width<\/span> <span class=\"sy0\">\/<\/span> <span class=\"nu0\">16<\/span> <span class=\"sy0\">*<\/span> <span class=\"nu0\">9<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">private<\/span> <span class=\"kw4\">void<\/span> Card_Tapped<span class=\"br0\">&#40;<\/span><span class=\"kw4\">object<\/span> sender, EventArgs e<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\nNavigation<span class=\"sy0\">.<\/span><span class=\"me1\">PushAsync<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">new<\/span> Views<span class=\"sy0\">.<\/span><span class=\"me1\">CardDetail<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/we'll that page later<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>&nbsp;<\/p>\n<p>Our Card is ready. Let&#8217;s try it. Create a\u00a0<strong>Views<\/strong> folder and Create a\u00a0ContentPage which named as\u00a0<strong>CardsPage<\/strong>. So we need to call our\u00a0<strong>Controls\u00a0<\/strong>namespace in XAML. I&#8217;ve added that line into ContentPage tag<\/p>\n<p>xmlns:controls=&#8221;clr-namespace:MaterialImageAndText.Controls&#8221;<\/p>\n<p>&nbsp;<\/p>\n<p>finally that page&#8217;s XAML will be that:<\/p>\n<div class=\"codecolorer-container xml default\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><div class=\"xml codecolorer\"><span class=\"sc-1\">&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?--&gt;<\/span><\/div><\/div>\n<p>It&#8217;s easy. We got that view on screen:<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter wp-image-773\" src=\"http:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/26026875_1775583465786092_2033255225_o.png\" alt=\"Xamarin Forms Material Design card Material Card\" width=\"440\" height=\"782\" srcset=\"https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/26026875_1775583465786092_2033255225_o.png 1080w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/26026875_1775583465786092_2033255225_o-169x300.png 169w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/26026875_1775583465786092_2033255225_o-768x1365.png 768w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/26026875_1775583465786092_2033255225_o-576x1024.png 576w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/26026875_1775583465786092_2033255225_o-600x1067.png 600w\" sizes=\"(max-width: 440px) 100vw, 440px\" \/><\/p>\n<h1>Material Detail Page with XAML<\/h1>\n<p>Firsly we need to understand the logic again.\u00a0<strong>Grid\u00a0<\/strong>allows exacty allocate componenets. And if you put more componenets than one in same cell in grid, last componenet will be paced the top. In that logic I&#8217;ll put my Image first to place bottom and my content will be drawing on Image. When I scroll the page Content will be able to move over Image. And The lastly, My float button will be toppest.<\/p>\n<p>For the understanding\u00a0\u00a0<strong>Grid<\/strong> logic and Material Design. We need not to think Horizontal or Vertical, We need to thing depth.<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-774\" src=\"http:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/materialDetail.png\" alt=\"Xamarin Forms Material Design with Float button\" width=\"1600\" height=\"558\" srcset=\"https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/materialDetail.png 1600w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/materialDetail-300x105.png 300w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/materialDetail-768x268.png 768w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/materialDetail-1024x357.png 1024w, https:\/\/enisnecipoglu.com\/wp-content\/uploads\/2017\/12\/materialDetail-600x209.png 600w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/p>\n<p>Let&#8217;s start to build that Design with XAML. I&#8217;ve created a ContentPage and named it\u00a0as\u00a0<strong>&#8220;CardDetail&#8221;<\/strong> in Views folder. XAML page looks like :<\/p>\n<div class=\"codecolorer-container xml default\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><div class=\"xml codecolorer\">&lt;!--?xml <span class=\"re0\">version<\/span>=<span class=\"st0\">&quot;1.0&quot;<\/span> <span class=\"re0\">encoding<\/span>=<span class=\"st0\">&quot;utf-8&quot;<\/span> ?--<span class=\"re2\">&gt;<\/span><br \/>\n&amp;nbsp;<br \/>\n<br \/>\n<span class=\"re1\">&lt;label<span class=\"re2\">&gt;<\/span><\/span><span class=\"re1\">&lt;\/label<span class=\"re2\">&gt;<\/span><\/span><br \/>\n<span class=\"re1\">&lt;label<span class=\"re2\">&gt;<\/span><\/span><span class=\"re1\">&lt;\/label<span class=\"re2\">&gt;<\/span><\/span><br \/>\n<br \/>\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc nulla ligula, viverra ac dictum ac, pellentesque ut est. Quisque sapien lorem, iaculis sed lacinia vel, fringilla et tellus. Fusce auctor tincidunt felis. Ut faucibus ultricies nisi, vitae tristique mauris aliquet vel. Cras vel congue risus. Sed sodales ultrices risus, eu convallis tortor luctus id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum ultricies pretium ultrices. Quisque rutrum feugiat ante. Donec nec purus facilisis, convallis diam vitae, condimentum nibh. Ut tincidunt, sapien in porttitor ultrices, lacus orci sagittis metus, at hendrerit arcu metus sed tortor.<br \/>\n<br \/>\n&amp;nbsp;<br \/>\n<br \/>\n&amp;nbsp;<br \/>\n<br \/>\n&amp;nbsp;<\/div><\/div>\n<p>&nbsp;<\/p>\n<p>All the things will be placed over and over. We need a alignment with CS. Just override\u00a0<strong>OnSizeAllocated<\/strong> and use that codes:<\/p>\n<div class=\"codecolorer-container csharp default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"csharp codecolorer\"><span class=\"kw1\">protected<\/span> <span class=\"kw1\">override<\/span> <span class=\"kw4\">void<\/span> OnSizeAllocated<span class=\"br0\">&#40;<\/span><span class=\"kw4\">double<\/span> width, <span class=\"kw4\">double<\/span> height<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">base<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">OnSizeAllocated<\/span><span class=\"br0\">&#40;<\/span>width, height<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nimgCard<span class=\"sy0\">.<\/span><span class=\"me1\">HeightRequest<\/span> <span class=\"sy0\">=<\/span> imgCard<span class=\"sy0\">.<\/span><span class=\"me1\">Width<\/span> <span class=\"sy0\">*<\/span> <span class=\"nu0\">2<\/span> <span class=\"sy0\">\/<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ set the height of Image to 3:2 Ratio<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/This keeps all margin as same value which given from XAML. Only changes Top Margin as Image height<\/span><br \/>\ngrdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">Margin<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw3\">new<\/span> Thickness<span class=\"br0\">&#40;<\/span>grdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">Margin<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">Left<\/span>, imgCard<span class=\"sy0\">.<\/span><span class=\"me1\">Height<\/span>, grdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">Margin<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">Right<\/span>, grdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">Margin<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">Bottom<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/Set the content height as scrollable<\/span><br \/>\ngrdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">HeightRequest<\/span> <span class=\"sy0\">=<\/span> grdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy0\">&amp;<\/span>gt<span class=\"sy0\">;<\/span> <span class=\"kw1\">this<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy0\">?<\/span> grdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy0\">:<\/span> <span class=\"kw1\">this<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">Height<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/boxCardColor.HeightRequest = boxCardColor.Width \/ 16 * 9;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>&nbsp;<\/p>\n<p>And we need animation now. Our animation depends on scroll gestures. Image will be go up when user scrolled down but not same ratio with scrolling. Our ratio is half of scroll. And for the float button that ratio is 20% of scrolled value.<\/p>\n<p>Finally CS file will be like:<\/p>\n<div class=\"codecolorer-container csharp default\" style=\"overflow:auto;white-space:nowrap;height:300px;\"><div class=\"csharp codecolorer\"><span class=\"kw1\">public<\/span> <span class=\"kw1\">partial<\/span> <span class=\"kw4\">class<\/span> CardDetail <span class=\"sy0\">:<\/span> ContentPage<br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">public<\/span> CardDetail<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\nInitializeComponent<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">protected<\/span> <span class=\"kw1\">override<\/span> <span class=\"kw4\">void<\/span> OnSizeAllocated<span class=\"br0\">&#40;<\/span><span class=\"kw4\">double<\/span> width, <span class=\"kw4\">double<\/span> height<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">base<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">OnSizeAllocated<\/span><span class=\"br0\">&#40;<\/span>width, height<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nimgCard<span class=\"sy0\">.<\/span><span class=\"me1\">HeightRequest<\/span> <span class=\"sy0\">=<\/span> imgCard<span class=\"sy0\">.<\/span><span class=\"me1\">Width<\/span> <span class=\"sy0\">*<\/span> <span class=\"nu0\">2<\/span> <span class=\"sy0\">\/<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ set the height of Image to 3:2 Ratio<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/This keeps all margin as same value which given from XAML. Only changes Top Margin as Image height<\/span><br \/>\ngrdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">Margin<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw3\">new<\/span> Thickness<span class=\"br0\">&#40;<\/span>grdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">Margin<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">Left<\/span>, imgCard<span class=\"sy0\">.<\/span><span class=\"me1\">Height<\/span>, grdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">Margin<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">Right<\/span>, grdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">Margin<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">Bottom<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/Set the content height as scrollable<\/span><br \/>\ngrdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">HeightRequest<\/span> <span class=\"sy0\">=<\/span> grdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy0\">&amp;<\/span>gt<span class=\"sy0\">;<\/span> <span class=\"kw1\">this<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy0\">?<\/span> grdContentArea<span class=\"sy0\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy0\">:<\/span> <span class=\"kw1\">this<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">Height<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/boxCardColor.HeightRequest = boxCardColor.Width \/ 16 * 9;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">private<\/span> <span class=\"kw4\">void<\/span> ScrollView_Scrolled<span class=\"br0\">&#40;<\/span><span class=\"kw4\">object<\/span> sender, ScrolledEventArgs e<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\nimgCard<span class=\"sy0\">.<\/span><span class=\"me1\">TranslateTo<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span> <span class=\"sy0\">*<\/span> <span class=\"br0\">&#40;<\/span>e<span class=\"sy0\">.<\/span><span class=\"me1\">ScrollY<\/span> <span class=\"sy0\">\/<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span>, <span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>e<span class=\"sy0\">.<\/span><span class=\"me1\">ScrollY<\/span> <span class=\"sy0\">&amp;<\/span>lt<span class=\"sy0\">;<\/span> imgCard<span class=\"sy0\">.<\/span><span class=\"me1\">Height<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\nimgFloatButton<span class=\"sy0\">.<\/span><span class=\"me1\">TranslateTo<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span>,e<span class=\"sy0\">.<\/span><span class=\"me1\">ScrollY<\/span> <span class=\"sy0\">\/<\/span><span class=\"nu0\">5<\/span>, <span class=\"nu0\">25<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw1\">else<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\nimgFloatButton<span class=\"sy0\">.<\/span><span class=\"me1\">TranslateTo<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span>, <span class=\"kw1\">this<\/span><span class=\"sy0\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy0\">-<\/span> imgFloatButton<span class=\"sy0\">.<\/span><span class=\"me1\">Height<\/span>, <span class=\"nu0\">100<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>&nbsp;<\/p>\n<p>And it&#8217;s ready!!<\/p>\n<p>Awesome Material Design.<\/p>\n<p>Source code and Sample project is available on my Git.hub<\/p>\n<p>There is a link you can download<\/p>\n<p><a href=\"https:\/\/github.com\/enisn\/Xamarin-Forms-Material-Cards\">https:\/\/github.com\/enisn\/Xamarin-Forms-Material-Cards<\/a><\/p>","protected":false},"excerpt":{"rendered":"&nbsp; Hello Dear! There is a project about Material Style Xamarin Forms Card with XAML. It will look like that: Let&#8217;s Start &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Material Cards with XAML Before we start, firstly we need to know\u00a0Frame control in XF has a shadow. We can use Frame to create our card.\u00a0Frames has 20 Padding as Default. If you have some problems with it\u00a0 check your padding is zero or not. Our first Card will be look like that &#8220;Kangaroo Valley Safari card in that link. So we need a Frame and some more componenets. Let&#8217;s start with a creating a Control in different file. We can use our little card in different project later. Create a Controls Folder in PCL project and Created a XAML component. &nbsp; &nbsp; This is our logic: So our XAML is look like: &lt;!&#8211;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&#8211;&gt; &lt;label&gt;&lt;\/label&gt; &lt;label&gt;&lt;\/label&gt; &lt;label&gt;&lt;\/label&gt; &lt;label&gt;&lt;\/label&gt; &lt;label&gt;&lt;\/label&gt; And we need something to add with CS like giving a ratio to our image (16:9) Cs file will be like: public partial class CardView : Frame &#123; public CardView&#40;&#41; &#123; InitializeComponent&#40;&#41;; &#125; protected override void OnSizeAllocated&#40;double width, double height&#41; &#123; base.OnSizeAllocated&#40;width, height&#41;; boxCardColor.HeightRequest = boxCardColor.Width \/ 16 * 9; imgCard.HeightRequest = imgCard.Width \/ 16 * 9; &#125; private void Card_Tapped&#40;object sender, EventArgs e&#41; &#123; Navigation.PushAsync&#40;new Views.CardDetail&#40;&#41;&#41;; \/\/we&#8217;ll that page later &#125; &#125; &nbsp; Our Card is ready. Let&#8217;s try it. Create a\u00a0Views folder and Create a\u00a0ContentPage which named as\u00a0CardsPage. So we need to call our\u00a0Controls\u00a0namespace in XAML. I&#8217;ve added that line into ContentPage tag xmlns:controls=&#8221;clr-namespace:MaterialImageAndText.Controls&#8221; &nbsp; finally that page&#8217;s XAML will be that: &lt;!&#8211;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&#8211;&gt; It&#8217;s easy. We got that view on screen: Material Detail Page with XAML Firsly we need to understand the logic again.\u00a0Grid\u00a0allows exacty allocate componenets. And if you put more componenets than one in same cell in grid, last componenet will be paced the top. In that logic I&#8217;ll put my Image first to place bottom and my content will be drawing on Image. When I scroll the page Content will be able to move over Image. And The lastly, My float button will be toppest. For the understanding\u00a0\u00a0Grid logic and Material Design. We need not to think Horizontal or Vertical, We need to thing depth. Let&#8217;s start to build that Design with XAML. I&#8217;ve created a ContentPage and named it\u00a0as\u00a0&#8220;CardDetail&#8221; in Views folder. XAML page looks like : &lt;!&#8211;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&#8211;&gt; &amp;nbsp; ","protected":false},"author":1,"featured_media":777,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[20,4,15,6],"tags":[34,28,29],"_links":{"self":[{"href":"https:\/\/enisnecipoglu.com\/en\/wp-json\/wp\/v2\/posts\/767"}],"collection":[{"href":"https:\/\/enisnecipoglu.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enisnecipoglu.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enisnecipoglu.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/enisnecipoglu.com\/en\/wp-json\/wp\/v2\/comments?post=767"}],"version-history":[{"count":14,"href":"https:\/\/enisnecipoglu.com\/en\/wp-json\/wp\/v2\/posts\/767\/revisions"}],"predecessor-version":[{"id":874,"href":"https:\/\/enisnecipoglu.com\/en\/wp-json\/wp\/v2\/posts\/767\/revisions\/874"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/enisnecipoglu.com\/en\/wp-json\/wp\/v2\/media\/777"}],"wp:attachment":[{"href":"https:\/\/enisnecipoglu.com\/en\/wp-json\/wp\/v2\/media?parent=767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enisnecipoglu.com\/en\/wp-json\/wp\/v2\/categories?post=767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enisnecipoglu.com\/en\/wp-json\/wp\/v2\/tags?post=767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}