<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7816424259476523004</id><updated>2011-04-21T10:52:42.206-07:00</updated><category term='Linear'/><category term='Blend'/><category term='Introduction'/><category term='Margin'/><category term='Height'/><category term='Visual Studio'/><category term='Solid'/><category term='Tag'/><category term='Fill'/><category term='Width'/><category term='Tutorial'/><category term='Attribute'/><category term='Brush'/><category term='XAML'/><category term='Color'/><category term='Expression'/><category term='TextBlock'/><category term='Ellipse'/><category term='Start'/><category term='Gradient'/><category term='Rectangle'/><category term='Handle'/><category term='Stroke'/><category term='WPF'/><category term='2008'/><category term='Silverlight'/><category term='Circle'/><title type='text'>WPF &amp; Silverlight Tutorial</title><subtitle type='html'>การเขียนโปรแกรม WPF และ Silverlight ด้วย Visual Studio , Expression Blend อย่างง่าย ๆ</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-387211247411450382</id><published>2008-11-10T22:36:00.000-08:00</published><updated>2008-11-10T22:54:00.669-08:00</updated><title type='text'>การใช้ Expression Blend ทำ Silverlight ตอนที่ 3</title><content type='html'>เราจะมาดูว่า ตอนแรกที่เราเริ่มสร้าง Project เราจะได้ โครงสร้าง xaml ที่เป็นกริด(ตาราง) ชื่อว่า LayoutRoot  ให้เราคลิกที่ด้านข้างของกริด  จะเป็นการสร้างขีดแถว(RowDefinition) ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step13.png"&gt;&lt;img style="cursor: pointer; width: 666px; height: 383px;" src="http://silverlight2blogpost.s3.amazonaws.com/step13.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;การคลิกที่หัวมุมด้านซ้ายบนของ Layout จะเป็นการสลับไปมา ระหว่าง Grid กับ Canvas&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step14.png"&gt;&lt;img style="cursor: pointer; width: 591px; height: 442px;" src="http://silverlight2blogpost.s3.amazonaws.com/step14.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;โปรดสังเกตุด้านข้างของกริด  จะเห็นเป็นรูปกุญแจ&lt;br /&gt;&lt;ul&gt;&lt;li&gt;รูปกุญแจปิด   หมายถึง   เรากำหนดขนาดตายตัว ให้กับแถวนั้น&lt;/li&gt;&lt;li&gt;รูปกุญแจเปิด  หมายถึง  เราให้ขนาดของแถวนั้น  สัมพันธ์เป็นสัดส่วนกับ แำถวอื่น ๆ ที่กุญแจเปิด เหมือนกัน (หากผู้ใช้ขยายขนาดกริด  แถวเิิปิดจะขนาดออกตามขนาดกริด หากผู้ใช้หดขนาดกริด  แถวเปิดจะหกลงตามขนาดกริด)&lt;/li&gt;&lt;/ul&gt;เมื่อคลิกที่รูปกุญแจ  จะเป็นการสลับไป-มา ระหว่าง เปิด-ปิด&lt;br /&gt;&lt;br /&gt;ตัวอย่างเช่น เราให้แถวบน กับ แถวล่างมีขนาดคงที่   แต่แถวกลางขยายขนาดได้ ตามขนาดกริด&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step15.png"&gt;&lt;img style="cursor: pointer; width: 581px; height: 435px;" src="http://silverlight2blogpost.s3.amazonaws.com/step15.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;และเราจะให้ คอลัมภ์แรกเปิด และคอลัมภ์ที่สองขนาดคงที่&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step17.png"&gt;&lt;img style="cursor: pointer; width: 584px; height: 436px;" src="http://silverlight2blogpost.s3.amazonaws.com/step17.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;เมื่อเราทำเสร็จ  พอเราไปดูโค้ด xaml จะเห็นโค้ด ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step18.png"&gt;&lt;img style="cursor: pointer; width: 487px; height: 406px;" src="http://silverlight2blogpost.s3.amazonaws.com/step18.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-387211247411450382?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/387211247411450382/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=387211247411450382' title='1 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/387211247411450382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/387211247411450382'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/11/expression-blend-silverlight-3.html' title='การใช้ Expression Blend ทำ Silverlight ตอนที่ 3'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-5774208076011504048</id><published>2008-11-04T00:24:00.000-08:00</published><updated>2008-11-04T00:46:22.736-08:00</updated><title type='text'>การใช้ Expression Blend ทำ Silverlight ตอนที่ 2</title><content type='html'>ใน Blend หน้าต่าง Tools จะต่างจาก Visual Studio เล็กน้อย&lt;br /&gt;โดย Blend จะไปคล้ายกับเครื่องมือกราฟิก เช่น โฟโต้ชอป มากกว่า&lt;br /&gt;โดยมีเครื่องมือวาดแบบเวกเตอร์ ด้านล่าง(ปากกา,ดินสอ)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step3.png"&gt;&lt;img style="cursor: pointer; width: 544px; height: 456px;" src="http://silverlight2blogpost.s3.amazonaws.com/step3.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;และมีคอนโทรลให้เรียกใช้ครบ&lt;br /&gt;โดยแบ่งออกเป็น&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Layout ชนิดต่าง ๆ (Grid,StackPanel,Canvas,Border,ScrollViewer,etc).&lt;/li&gt;&lt;li&gt;คอนโทรลข้อความ (TextBlock,TextBox,etc)&lt;/li&gt;&lt;li&gt;คอนโทรลอื่น ๆ&lt;/li&gt;&lt;/ol&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step5.png"&gt;&lt;img style="cursor: pointer; width: 502px; height: 406px;" src="http://silverlight2blogpost.s3.amazonaws.com/step5.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;หากต้องการเลือกคอนโทรล อื่น ๆ ให้กด &amp;gt;&amp;gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step6.png"&gt;&lt;img style="cursor: pointer; width: 539px; height: 328px;" src="http://silverlight2blogpost.s3.amazonaws.com/step6.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ขอให้กดปุ่ม Show All ด้วย  เพื่อจะได้เห็นคอนโทรลครบทั้งหมด&lt;br /&gt;เมื่อคุณได้คลิกคอนโทรล ให้คุณคลิกแล้วลากบนอาร์ตบอร์ด ก็จะเห็นคอนโทรลขึ้นมาตามพิกัดที่คุณลาก&lt;br /&gt;หรือ คุณจะลากคอนโทรล มาวางบนอาร์ตบอร์ด เลยก็ได้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step8.png"&gt;&lt;img style="cursor: pointer; width: 565px; height: 356px;" src="http://silverlight2blogpost.s3.amazonaws.com/step8.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ทำความเข้าใจกับหน้าต่างพร้อพเพอตี้&lt;/span&gt;&lt;br /&gt;เมื่อคุณคลิกบนคอนโทรล แล้วกดที่หน้าต่างพร้อพเพอตี้ ด้านขวา ดังรูป&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step9.png"&gt;&lt;img style="cursor: pointer; width: 543px; height: 630px;" src="http://silverlight2blogpost.s3.amazonaws.com/step9.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;เราสามารถเปลี่ยนค่าพร้อพเพอตี้ได้ตามต้องการ&lt;br /&gt;ด้านบน ผมเปลี่ยนสี Background เป็นแบบ Gradient (ไล่เฉดสี) สีน้ำเงิน&lt;br /&gt;&lt;br /&gt;และต้องการจะเปลี่ยนค่าฟอนต์ แต่ผมหาพร้อพเพอตี้นี้ไม่เจอ&lt;br /&gt;ผมจึงพิมพ์ลงไปในช่อง Search ว่า font&lt;br /&gt;หน้าต่างพร้อพเพอรตี้ก็จะแสดงพร้อพเพอตี้ที่เกี่ยวข้องกับ font ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step10.png"&gt;&lt;img style="cursor: pointer; width: 563px; height: 259px;" src="http://silverlight2blogpost.s3.amazonaws.com/step10.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-5774208076011504048?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/5774208076011504048/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=5774208076011504048' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/5774208076011504048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/5774208076011504048'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/11/expression-blend-silverlight-2.html' title='การใช้ Expression Blend ทำ Silverlight ตอนที่ 2'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-1512419257720186138</id><published>2008-11-02T22:18:00.000-08:00</published><updated>2008-11-03T01:21:45.368-08:00</updated><title type='text'>การใช้ Expression Blend ทำ Silverlight ตอนที่ 1</title><content type='html'>ในตอนก่อน ๆ เราใช้เีพียง Visual Studio ในการเขียน Silverlight ในตอนนี้เราจะใช้ Expression Blend ในการช่่วยเขียน Silverlight บ้าง โดยเราจะเขียนโปรแกรม Chat กัน ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/app2.png"&gt;&lt;img style="cursor: pointer; width: 637px; height: 507px;" src="http://silverlight2blogpost.s3.amazonaws.com/app2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ด้านบน คือ หน้าจอตอนเราใช้จริง ส่วนด้านล่าง คือ หน้าจอตอนเราดีไซน์งานใน Blend&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step64.png"&gt;&lt;img style="cursor: pointer; width: 642px; height: 383px;" src="http://silverlight2blogpost.s3.amazonaws.com/step64.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;หากต้องการ ไฟล์ Source Code ให้คลิ้ก&lt;a href="http://www.scottgu.com/blogposts/chatsample/chatclient.zip"&gt;ที่นี่&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;เริ่มต้น สร้างโปรเจ็ก Silverlight 2&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step1.png"&gt;&lt;img style="cursor: pointer; width: 632px; height: 450px;" src="http://silverlight2blogpost.s3.amazonaws.com/step1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;เมื่อเสร็จแล้วเราจะได้ ไฟล์โซลูชั่น และไฟล์ือื่น ๆ ครบ (สามารถเปิดได้จาก Visual Studio ได้)&lt;br /&gt;และเห็นหน้าตา ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight2blogpost.s3.amazonaws.com/step2.png"&gt;&lt;img style="cursor: pointer; width: 628px; height: 380px;" src="http://silverlight2blogpost.s3.amazonaws.com/step2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ตรงกลางจะเห็น หน้าต่าง บน เป็นหน้าต่าง Design ซึ่งจะมีหน้าตาเหมือน เนื้องานที่ออกมา (WYSWYG)&lt;br /&gt;ด้านล่าง จะเห็น หน้าต่าง ที่เป็นโค้ด xaml ของเนื้องานนั้น&lt;br /&gt;&lt;br /&gt;บล๊อกได้เคยกล่าวถึงวิธีการใช้ Expression Blend ไว้พอสมควร  &lt;a href="http://wpftutor.blogspot.com/2008_09_01_archive.html"&gt;โปรดติดตาม ตอนก่อน ๆ ที่อยู่ในเดือน กันยายน&lt;/a&gt; ครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-1512419257720186138?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/1512419257720186138/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=1512419257720186138' title='1 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/1512419257720186138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/1512419257720186138'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/11/expression-blend-silverlight-1.html' title='การใช้ Expression Blend ทำ Silverlight ตอนที่ 1'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-4308052376521804002</id><published>2008-10-29T02:23:00.000-07:00</published><updated>2008-10-30T02:18:49.903-07:00</updated><title type='text'>ทำโปรเจ็ก Silverlight ตอนที่ 7 ใช้ Control Template เพื่อแต่งคอนโทรลให้สวยงามขึ้น</title><content type='html'>(แปลจาก blog ภาษาอังกฤษของ Scottgu &lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-7-using-control-templates-to-customize-a-control-s-look-and-feel.aspx"&gt;ที่นี่&lt;/a&gt;)&lt;br /&gt;หากต้องการตัวอย่าง SourceCode ฉบับเต็ม กดที่นี่&lt;br /&gt;&lt;br /&gt;คุณสมบัติพิเศษของ Silverlight และ WPF คือ อนุญาติให้เราปรับแก้ หน้าตา ของคอนโทรล ได้อย่างสมบูรณ์&lt;br /&gt;เรามาดูคอนโทรลแรกที่เราจะแก้กัน&lt;br /&gt;&lt;br /&gt;ปุ่ม Button&lt;br /&gt;ของเดิม&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step13.png"&gt;&lt;img style="cursor: pointer; width: 482px; height: 30px;" src="http://silverlight1blogpost.s3.amazonaws.com/step13.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;มีหน้าตา อย่างนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step109.png"&gt;&lt;img style="cursor: pointer; width: 172px; height: 86px;" src="http://silverlight1blogpost.s3.amazonaws.com/step109.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ท่านอาจจะแปลกใจว่า Content ของ Button นั้น  ไม่จำเป็นต้องเป็นข้อความเสมอไป  จริง ๆ เราอาจใส่ออปเจ็กอื่น ๆ ไว้ภายใน (ในแท็ก &amp;lt;Button.Content&amp;gt;) ได้ เช่น&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step107.png"&gt;&lt;img style="cursor: pointer; width: 531px; height: 177px;" src="http://silverlight1blogpost.s3.amazonaws.com/step107.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ได้ผลดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step108.png"&gt;&lt;img style="cursor: pointer; width: 473px; height: 246px;" src="http://silverlight1blogpost.s3.amazonaws.com/step108.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;เราอาจใช้คอนโทรลที่เป็นรูปร่าง(Shape) เช่น Ellipse(วงรี) เช่น&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step21.png"&gt;&lt;img style="cursor: pointer; width: 583px; height: 297px;" src="http://silverlight1blogpost.s3.amazonaws.com/step21.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ได้ผลดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step22.png"&gt;&lt;img style="cursor: pointer; width: 571px; height: 298px;" src="http://silverlight1blogpost.s3.amazonaws.com/step22.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ถ้าเราจะเล่นพิเรนท์ ใส่ปฏิทินลงไปในปุ่ม ก็ยังได้ เช่น&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step23.png"&gt;&lt;img style="cursor: pointer; width: 519px; height: 157px;" src="http://silverlight1blogpost.s3.amazonaws.com/step23.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step24.png"&gt;&lt;img style="cursor: pointer; width: 524px; height: 463px;" src="http://silverlight1blogpost.s3.amazonaws.com/step24.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;การปรับหน้าตาของคอนโทรลด้วย ControlTemplate&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;ใน WPF และ Silverlight เราสามารถปรับหน้าตาของคอนโทรลได้โดยสิ้นเชิง  โดยที่พฤติกรรมของคอนโทรลไม่เปลี่ยนแต่อย่างใด&lt;br /&gt;ตัวอย่างเช่น  ถ้าเราต้องการเปลี่ยนปุ่มให้เป็นรูปวงกลมเหมือนด้านล่าง  ให้เราสร้าง Style ขึ้นมาอันนึง เก็บไว้ใน App.xaml แล้วใส่ &amp;lt;ControlTemplate&amp;gt; ไว้ข้างใน  ภายในให้ใส่ หน้าตา ที่ต้องการไว้&lt;br /&gt;ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step110.png"&gt;&lt;img style="cursor: pointer; width: 562px; height: 457px;" src="http://silverlight1blogpost.s3.amazonaws.com/step110.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;แล้วนำไปใช้กับ Button ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step112.png"&gt;&lt;img style="cursor: pointer; width: 702px; height: 51px;" src="http://silverlight1blogpost.s3.amazonaws.com/step112.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;จะได้ผล ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step111.png"&gt;&lt;img style="cursor: pointer; width: 306px; height: 248px;" src="http://silverlight1blogpost.s3.amazonaws.com/step111.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;แต่ สังเกตว่า ใน Button เรากำหนด Size และ Content ไว้ตายตัว("Push Me!)&lt;br /&gt;แต่ ถ้าเราต้องการจะนำ Size ที่ผู้ใช้คอนโทรลด้านนอก กำหนดมา มาใช้&lt;br /&gt;และใช้ Content ที่ผู้ใช้ด้านนอกกำหนดมา มาใช้&lt;br /&gt;&lt;br /&gt;ให้เราใช้ {TemplateBinding}&lt;br /&gt;และใช้ ContentPresenter แทน Content ของเรา  ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step113.png"&gt;&lt;img style="cursor: pointer; width: 595px; height: 425px;" src="http://silverlight1blogpost.s3.amazonaws.com/step113.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;แล้วเรานำ ControlTemplate นี้ไปใช้  ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step114.png"&gt;&lt;img style="cursor: pointer; width: 592px; height: 295px;" src="http://silverlight1blogpost.s3.amazonaws.com/step114.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;แล้วได้ผลดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step115.png"&gt;&lt;img style="cursor: pointer; width: 576px; height: 230px;" src="http://silverlight1blogpost.s3.amazonaws.com/step115.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ทีนี้เราจะให้ เป็นปุ่มวงกลม แล้วนำไปใช้ใน Digg ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step118.png"&gt;&lt;img style="cursor: pointer; width: 634px; height: 410px;" src="http://silverlight1blogpost.s3.amazonaws.com/step118.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;แล้วได้ผลลัพท์สุดท้าย ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step117.png"&gt;&lt;img style="cursor: pointer; width: 624px; height: 415px;" src="http://silverlight1blogpost.s3.amazonaws.com/step117.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-4308052376521804002?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/4308052376521804002/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=4308052376521804002' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/4308052376521804002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/4308052376521804002'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/10/silverlight-7-control-template.html' title='ทำโปรเจ็ก Silverlight ตอนที่ 7 ใช้ Control Template เพื่อแต่งคอนโทรลให้สวยงามขึ้น'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-8779051058989515460</id><published>2008-10-27T23:12:00.000-07:00</published><updated>2008-10-29T02:22:03.058-07:00</updated><title type='text'>ทำโปรเจ็ก Silverlight ตอนที่ 6 ใช้ User Control เพื่อแสดงข้อมูลแบบหนึ่งต่อหลาย (Master/Detail)</title><content type='html'>(แปลจาก blog ภาษาอังกฤษของ Scottgu &lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-6-using-user-controls-to-implement-master-detail-scenarios.aspx"&gt;ที่นี่&lt;/a&gt;)&lt;br /&gt;หากต้องการตัวอย่าง SourceCode ฉบับเต็ม &lt;a href="http://www.scottgu.com/blogposts/slbeta1apps/diggsample.zip"&gt;กดที่นี่&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;เป้าหมายพื้นฐานของ Silverlight และ WPF คือ ให้ผู้ใช้สร้างคอนโทรลขึ้นมาเอง ที่จะนำกลับมาใช้ใหม่ได้เรื่อย ๆ  โดยเขียน คอนโทรลสืบทอดจากคอนโทรลเดิมที่มีอยู่แล้วใน Silverlight (จาก Control หรือ TextBox , Button ,อื่น ๆ)&lt;br /&gt;&lt;br /&gt;สำหรับในตัวอย่างนี้ เราต้องการให้ ผู้ใช้ ค้นหา Topic แล้วแสดง Story ใน List   เมื่อผู้ใช้เลือก Story แล้ว  จะแสดง Detail ออกมา เช่น ให้เลือก Storyจาก ListBox ด้านล่าง&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/app1.png"&gt;&lt;img style="cursor: pointer; width: 668px; height: 541px;" src="http://silverlight1blogpost.s3.amazonaws.com/app1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;แล้วจะแสดง Detail ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/app2.png"&gt;&lt;img style="cursor: pointer; width: 667px; height: 545px;" src="http://silverlight1blogpost.s3.amazonaws.com/app2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;เราจะสร้างคอนโทรล ที่ชื่อว่า "StoryDetailsView" เพื่อแสดงผล Detail ดังภาพด้านบน&lt;br /&gt;โดยกด Add New Item แล้ว เลือก  Silverlight User Control  แล้วกด Add&lt;br /&gt;&lt;br /&gt;จะเกิดไฟล์ 2 ไฟล์ คือ StoryDetailsView.xaml และ StoryDetaisView.xaml.cs ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step89.png"&gt;&lt;img style="cursor: pointer; width: 232px; height: 269px;" src="http://silverlight1blogpost.s3.amazonaws.com/step89.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;สร้าง Modal Dialog (หน้าต่างที่ต้องทำงานเสร็จจนปิดก่อน จึงจะทำงานอย่างอื่นต่อได้) โดยใช้ User Control&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;เราจะแสดงภาพให้ดูเหมือน ปิดหน้าเดิม  ด้วยการสร้าง สี่เหลี่ยม Rectangle ทึบ ๆ ครอบทับ หน้าจอ ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step91.png"&gt;&lt;img style="cursor: pointer; width: 705px; height: 247px;" src="http://silverlight1blogpost.s3.amazonaws.com/step91.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Opacity คือ ความทึบแสง  ถ้ามีค่าเป็น 1 หมายถึงทึบ   ถ้ามีค่าเป็น 0 หมายถึง ใส&lt;br /&gt;ในที่นี้ Opacity="0.765"  หมายถึง ทึบแสง 76.5%&lt;br /&gt;HorizontalAlignment="Stretch" หมายถึง กว้างเต็มตามแนวขวาง&lt;br /&gt;VerticalAlignment="Stretch" หมายถึง สูงเต็มตามแนวตั้ง (พูดง่าย ๆ ว่า เต็มจอ)&lt;br /&gt;&lt;br /&gt;Border ด้านล่าง คือ กรอบของไดอะลอก  มีมุมมน (CornerRadius="30")&lt;br /&gt;แล้วมี Button ปุ่ม Close อยู่ข้างใน เชื่อมกับอีเวนท์ CloseBtn_Click&lt;br /&gt;&lt;br /&gt;ได้ผลดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step92.png"&gt;&lt;img style="cursor: pointer; width: 599px; height: 424px;" src="http://silverlight1blogpost.s3.amazonaws.com/step92.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ในฟังก์ชัน CloseBtn_Click ที่อยู่ใน .cs ให้กำหนด Visibility ของคอนโทรลให้เป็น Collapsed เพื่อซ่อนปิดคอนโทรลไป ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step93.png"&gt;&lt;img style="cursor: pointer; width: 526px; height: 376px;" src="http://silverlight1blogpost.s3.amazonaws.com/step93.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;การนำคอนโทรลไปใช้&lt;br /&gt;เราก็ใส่คอนโทรลของเราเข้าไปในหน้า Page.xaml และกำหนด Visibility="Collapse" ไว้ก่อน ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step94.png"&gt;&lt;img style="cursor: pointer; width: 680px; height: 137px;" src="http://silverlight1blogpost.s3.amazonaws.com/step94.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ให้เราสร้างฟังก์ชันเชื่อมอีเวนท์ SelectionChanged จาก ListBox ของเรา ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step95.png"&gt;&lt;img style="cursor: pointer; width: 590px; height: 84px;" src="http://silverlight1blogpost.s3.amazonaws.com/step95.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ทำให้ เมื่อเราเลือกหัวข้อใดหัวข้อหนึ่งใน ListBox แล้ว คอนโทรลของเราก็จะปรากฏตัวขึ้น&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ส่งต่อข้อมูลของ Story ไปให้ คอนโทรลของเรา&lt;/span&gt;&lt;br /&gt;เมื่อผู้ใช้เลือก Story ที่ต้องการแล้ว  เราก็จะส่ง Story นั้นไปเก็บไว้ในพร้อพเพอตี้ DataContext ของ DetailsView (สำหรับ DataBinding) ดังนี้ แล้วแสดงคอนโทรลออกมา (โดยเซ็ต Visibility) ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step97.png"&gt;&lt;img style="cursor: pointer; width: 581px; height: 136px;" src="http://silverlight1blogpost.s3.amazonaws.com/step97.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;แล้วในคอนโทรลของเรา  เชื่อม (DataBind)   ระหว่าง Title กับ TextBlock  ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step99.png"&gt;&lt;img style="cursor: pointer; width: 676px; height: 326px;" src="http://silverlight1blogpost.s3.amazonaws.com/step99.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;จะได้ผลดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step100.png"&gt;&lt;img style="cursor: pointer; width: 513px; height: 339px;" src="http://silverlight1blogpost.s3.amazonaws.com/step100.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;สังเกตว่า Title ของ Story มาแสดงแล้ว&lt;br /&gt;ทีนี้เราจะมาเชื่อมข้อมูล ทั้งหมด แล้วแสดงใน หน้าต่างนี้ ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step103.png"&gt;&lt;img style="cursor: pointer; width: 673px; height: 509px;" src="http://silverlight1blogpost.s3.amazonaws.com/step103.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;แล้วได้ผล ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step101.png"&gt;&lt;img style="cursor: pointer; width: 626px; height: 434px;" src="http://silverlight1blogpost.s3.amazonaws.com/step101.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;สังเกตว่า เราสามารถเชื่อม ข้อมูล ระหว่างกัน ผ่านคอนโทรล ด้วยพร้อพเพอตี้ DataContext โดย ไม่ต้องเขียน โค้ดโปรแกรม เลยแม้แต่บรรทัดเดียว&lt;br /&gt;&lt;br /&gt;ตอนต่อไป เราจะตกแต่ง ListBox และ Button ให้ดูสวยกว่านี้ ด้วยการแก้ไข ControlTemplate&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-8779051058989515460?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/8779051058989515460/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=8779051058989515460' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/8779051058989515460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/8779051058989515460'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/10/silverlight-6-user-control-masterdetail.html' title='ทำโปรเจ็ก Silverlight ตอนที่ 6 ใช้ User Control เพื่อแสดงข้อมูลแบบหนึ่งต่อหลาย (Master/Detail)'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-6596566421717333810</id><published>2008-10-26T23:22:00.000-07:00</published><updated>2008-10-26T23:54:34.686-07:00</updated><title type='text'>ทำโปรเจ็ก Silverlight ตอนที่ 5 การใช้ ListBox และ Data Binding (เชื่อมโยงข้อมูล)</title><content type='html'>(แปลจาก blog ภาษาอังกฤษของ Scottgu&lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-5-using-the-listbox-and-databinding-to-display-list-data.aspx"&gt;ที่นี่&lt;/a&gt;)&lt;br /&gt;หากต้องการตัวอย่าง SourceCode ฉบับเต็ม &lt;a href="http://www.scottgu.com/blogposts/slbeta1apps/diggsample.zip"&gt;กดที่นี่&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ตอนก่อน เราใช้ DataGrid ในแสดงผล ข้อมูลเว็บ Digg  ในตอนนี้เราจะลองใช้ ListBox แสดงแทน  เพื่อให้ข้อมูลดูเป็นรายการแทน (แทนการดูเป็นตาราง)&lt;br /&gt;&lt;br /&gt;เริ่มต้น   แทนคอนโทรล DataGrid ด้วยคอนโทรล &amp;lt;ListBox&amp;gt;  โดยให้มีชื่อเหมือนเดิมว่า StoriesList :&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step73.png"&gt;&lt;img style="cursor: pointer; width: 352px; height: 60px;" src="http://silverlight1blogpost.s3.amazonaws.com/step73.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;เมื่อเรารันโปรแกรม แล้วลอง ค้นหา  จะได้ผลดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step74.png"&gt;&lt;img style="cursor: pointer; width: 607px; height: 356px;" src="http://silverlight1blogpost.s3.amazonaws.com/step74.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;คุณอาจประหลาดใจว่า คำว่า "DiggSample.DiggStory" มาจากไหน&lt;br /&gt;เนื่องจาก ListBox ไม่รู้จะเอาค่าไหนของ DiggStory มา   มันจึงเอามาจากฟังก์ชัน ToString() แทน&lt;br /&gt;&lt;br /&gt;ให้เราเพิ่ม DisplayMemberPath="Title" เข้าไป ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step76.png"&gt;&lt;img style="cursor: pointer; width: 600px; height: 59px;" src="http://silverlight1blogpost.s3.amazonaws.com/step76.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;เราจะได้ผลดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step75.png"&gt;&lt;img style="cursor: pointer; width: 599px; height: 360px;" src="http://silverlight1blogpost.s3.amazonaws.com/step75.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;เนื่องจาก เราต้องการแสดงผลมากกว่าหนึ่งฟิลด์ และเราต้องการจะจัดวางตำแหน่งข้อมูลใหม่ เราจึงสร้าง&lt;br /&gt;&amp;lt;DataTemplate&amp;gt; ขึ้นมาไว้ใน &amp;lt;ListBox.ItemTemplate&amp;gt; แล้วใส่แท็กสำหรับจัดวางข้อมูลไว้ในภายใน&lt;br /&gt;ตัวอย่างเช่น เราจะแสดง Title ,NumDigg ไว้ใน TextBlock ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step77.png"&gt;&lt;img style="cursor: pointer; width: 624px; height: 277px;" src="http://silverlight1blogpost.s3.amazonaws.com/step77.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;แล้วได้ผลดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step78.png"&gt;&lt;img style="cursor: pointer; width: 653px; height: 452px;" src="http://silverlight1blogpost.s3.amazonaws.com/step78.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;เราลองมาทำในแบบที่ซับซ้อนขึ้นอีกนิดกัน ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step85.png"&gt;&lt;img style="cursor: pointer; width: 723px; height: 451px;" src="http://silverlight1blogpost.s3.amazonaws.com/step85.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;และใน App.xaml ก็กำหนด Style ไว้ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step86.png"&gt;&lt;img style="cursor: pointer; width: 528px; height: 618px;" src="http://silverlight1blogpost.s3.amazonaws.com/step86.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ได้ผลดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step84.png"&gt;&lt;img style="cursor: pointer; width: 637px; height: 402px;" src="http://silverlight1blogpost.s3.amazonaws.com/step84.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ตอนหน้า จะเกี่ยวกับแสดงข้อมูล แบบหนึ่งต่อหลาย (Master/Details) ครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-6596566421717333810?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/6596566421717333810/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=6596566421717333810' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/6596566421717333810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/6596566421717333810'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/10/silverlight-5-listbox-data-binding.html' title='ทำโปรเจ็ก Silverlight ตอนที่ 5 การใช้ ListBox และ Data Binding (เชื่อมโยงข้อมูล)'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-1578306881182448325</id><published>2008-10-25T01:31:00.000-07:00</published><updated>2008-10-25T02:04:32.742-07:00</updated><title type='text'>ทำโปรเจ็ก Silverlight ตอนที่ 4 กำหนด Style เพื่อให้สวยงามขึ้น</title><content type='html'>(แปลจาก blog ภาษาอังกฤษของ Scottgu &lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-4-using-style-elements-to-better-encapsulate-look-and-feel.aspx"&gt;ที่นี่&lt;/a&gt;)&lt;br /&gt;หากต้องการตัวอย่าง SourceCode ฉบับเต็ม  &lt;a href="http://www.scottgu.com/blogposts/slbeta1apps/diggsample.zip"&gt;กดที่นี่&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ใช้แท็ก Style เพื่อกำหนดหน้าตาการแสดงผล&lt;/span&gt;&lt;br /&gt;WPF และ Silverlight มีกลไกที่เรียกว่า Style ที่เราสามารถใช้เพื่อเก็บลักษณะ (ค่า Property) ต่าง ๆ ไว้ในที่เดียว (resource) แล้วนำมาใช้ได้บ่อย ๆ  เราอาจเก็บ Style ไว้ในไฟล์อื่นก็ได้ เพื่อที่จะเอามา ปั๊มค่า Property ใส่ Control หลาย ๆ อัน ให้มีหน้าตาเหมือนกัน เช่น กำหนดค่า Color,Font,Size,Margin ไว้ใน Style ชื่อหนึ่ง&lt;br /&gt;แล้วเอา Style นี้ ไปใส่ในคอนโทรล หลาย ๆ อัน แล้วจะมี Color,Font,Size,Margin เดียวกันหมด&lt;br /&gt;&lt;br /&gt;ในตัวอย่างนี้ เราจะนำเอาค่า Style ไปเก็บไว้ในไฟล์ชื่อ App.xaml  ซึ่งจะทำให้เราเอาไปใช้ได้ในทุก ๆ ที่ในโปรแกรม&lt;br /&gt;จากเดิมที่กำหนดค่า Property ต่าง ๆ ไว้ในคอนโทรลนั้น&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step66.png"&gt;&lt;img style="cursor: pointer; width: 637px; height: 68px;" src="http://silverlight1blogpost.s3.amazonaws.com/step66.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ก็ให้เราดึงเอา Property ต่าง ๆ มาใส่ไว้ใน Style แทน ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step72.png"&gt;&lt;img style="cursor: pointer; width: 696px; height: 347px;" src="http://silverlight1blogpost.s3.amazonaws.com/step72.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;โดยเราจะใส่ x:Key="ชื่อสไตล์"(ด้านบน)  เพื่อเป็นตัวระบุ ที่จะนำไปใช้ในภายหลัง(ด้านล่าง) ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step71.png"&gt;&lt;img style="cursor: pointer; width: 543px; height: 65px;" src="http://silverlight1blogpost.s3.amazonaws.com/step71.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ในที่นี้ เราจะึดึงเอา Property ของคอนโทรลทุกอัน  มาเก็บเป็นสไตล์ทั้งหมด&lt;br /&gt;ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step70.png"&gt;&lt;img style="cursor: pointer; width: 656px; height: 572px;" src="http://silverlight1blogpost.s3.amazonaws.com/step70.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;การนำ Property มาเก็บไว้ใน Style ทำให้โปรแกรมดูโล่งขึ้น  โปรแกรมเมอร์ไม่ลายตา  จะได้สนใจในสิ่งที่สำคัญมากขึ้น  และสไตล์นั้น ยังเอาไปใช้ในที่อื่น ๆ ได้ด้วย&lt;br /&gt;&lt;br /&gt;ตอนต่อไป จะเกี่ยวข้องกับคอนโทรล ListBox และ Data Binding (การเชื่อมกับข้อมูล)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-1578306881182448325?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/1578306881182448325/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=1578306881182448325' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/1578306881182448325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/1578306881182448325'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/10/silverlight-4-style.html' title='ทำโปรเจ็ก Silverlight ตอนที่ 4 กำหนด Style เพื่อให้สวยงามขึ้น'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-8851080965136829425</id><published>2008-10-23T23:40:00.000-07:00</published><updated>2008-10-24T00:56:21.010-07:00</updated><title type='text'>ทำโปรเจ็ก Silverlight ตอนที่ 3 ดึงข้อมูลจาก Internet และแสดงผลใน Data Grid</title><content type='html'>(แปลจาก blog ภาษาอังกฤษของ Scottgu &lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-3-using-networking-to-retrieve-data-and-populate-a-datagrid.aspx"&gt;ที่นี่&lt;/a&gt;)&lt;br /&gt;ต่อจากตอนที่แล้ว  ตอนนี้ เราสร้าง Silverlight ที่นำข้อมูลจากเว็บ Digg มาแสดงผล&lt;br /&gt;&lt;br /&gt;Silverlight 2 มี API ภายในที่จะติดต่อกับ Network ได้หลายแบบ เช่น REST, SOAP/WS*, RSS, JSON ,XML HTTP service และ Socket API(System.Net.Socket ทำให้ติดต่อกับเน็ตที่ไม่ใช่ HTTP ได้ด้วย)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;การติดต่อข้ามโดเมน(เว็บไซต์)&lt;/span&gt;&lt;br /&gt;โดยปกติ Silverlight จะติดต่อได้กับเว็บไซต์ตัวเอง  การติดต่อกับเว็บไซต์อื่นได้ก็ต่อเมื่อ เว็บไซต์อื่นนั้นได้มีไฟล์ XML Policy ที่ระบุอนุญาตให้ติดต่อด้วย(เป็นฟอร์แมตของ Silverlight เอง)  และสามารถใช้ไฟล์ XML Policy ในฟอร์แมตของ Adobe Flash ได้ด้วย&lt;br /&gt;&lt;br /&gt;เว็บไซต์ Digg.com มี API ในแบบของ Http เจ๋ง ๆ ให้เราใช้พอสมควร และเว็บนี้ก็มีไฟล์ XML Policy สำหรับ Flash  เราจึงสามารถติดต่อกับเว็บนี้ได้&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;การดึงเอาหัวข้อเนื้อหา จาก feed ของ เว็บ Digg.com &lt;/span&gt;&lt;br /&gt;เราจะสร้างโปรแกรมที่  ให้ผู้ใช้พิมพ์คำคีย์เวิร์ดเพื่อหาข้อมูล (เช่น Programming) แล้วกดปุ่ม Search เพื่อไปดึงเอาหัวข้อข้อมูลมาแสดง&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step56.png"&gt;&lt;img style="cursor: pointer; width: 661px; height: 315px;" src="http://silverlight1blogpost.s3.amazonaws.com/step56.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;โดยเราจะเรียกใช้ &lt;a href="http://apidoc.digg.com/ListStories"&gt;Digg REST Feed API&lt;/a&gt;  โดยเราจะใส่คีย์เวิร์ด(คำที่จะหา)ลงใน URL (ตัวอย่างเช่น GET /stories/topic/programming) แล้วส่งไป    โดยเราจะได้ XML คำตอนกลับมา&lt;br /&gt;ตัวอย่างเช่น  &lt;a href="http://services.digg.com/stories/topic/programming?count=20&amp;amp;appkey=http%3A%2F%2Fscottgu.com"&gt;http://services.digg.com/stories/topic/programming?count=20&amp;amp;appkey=http%3A%2F%2Fscottgu.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;เรียกใช้ Digg API แบบ REST ด้วย  คลาส System.Net.WebClient&lt;/span&gt;&lt;br /&gt;ทันทีที่กดปุ่ม Search เราจะเข้า Event "Click" เพื่อไปเอาข้อความใน TextBox แล้วเข้าฟังก์ชันเรียกเน็ต Digg เพื่อดึงเอา XML มาแสดงผล และเนื่องจากการรอข้อมูลกลับมาจะใช้เวลานาน  เราจึงใช้วิธีแบบไม่ต้องรอ(Asynchronous)  โดยให้คลาส WebClient เรียก event ของเราตอนที่ได้ข้อมูลครบแล้ว  ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step58.png"&gt;&lt;img style="cursor: pointer; width: 667px; height: 308px;" src="http://silverlight1blogpost.s3.amazonaws.com/step58.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;จะโค้ดด้านบน เราจะได้ XML ผลลัพท์อยู่ที่ตัวแปร result ของเมทอด DiggService_DownloadStoriesCommpleted&lt;br /&gt;&lt;br /&gt;เราจะเอาข้อมูลใน XML มาเก็บเป็นออปเจ็ก ๆ ในรูปแบบคลาส ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.scottgu.com/blogposts/diggsample/step1.png"&gt;&lt;img style="cursor: pointer; width: 462px; height: 309px;" src="http://www.scottgu.com/blogposts/diggsample/step1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;โดยใช้ฟีเจอร์ LINQ to XML (Language Intregrate Query) เพื่อแปลงข้อมูลมาใส่ในคลาส DiggStory&lt;br /&gt;ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.scottgu.com/blogposts/diggsample/step2.png"&gt;&lt;img style="cursor: pointer; width: 669px; height: 569px;" src="http://www.scottgu.com/blogposts/diggsample/step2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;เอาข้อมูลจากคลาส DiggStory มาแสดงใน DataGrid&lt;/span&gt;&lt;br /&gt;เราจะใส่คอนโทรล DataGrid ในโปรแกรมของเรา  โดยเพิ่ม reference แอสเซมบลี้ "Silverlight Data Controls"  และเพิ่มแท็ก ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.scottgu.com/blogposts/diggsample/step5.png"&gt;&lt;img style="cursor: pointer; width: 459px; height: 47px;" src="http://www.scottgu.com/blogposts/diggsample/step5.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ฟีเจอร์ของ DataGrid  อนุญาต ให้คุณระบุคอลัมภ์ , ชนิดตัวแปร และอื่น ๆ ได้โดยละเอียด&lt;br /&gt;แต่ถ้าคุณต้องการความสะดวก คุณก็ระบุเพียง ItemSource = ข้อมูลที่ได้  ก็พอ  แล้ว DataGrid จะกำหนดค่าต่าง ๆ โดยอัตโนมัติ&lt;br /&gt;และถ้าคุณต้องการบอกว่า ไม่ให้เลือก select บรรทัดไว้ก่อนล่วงหน้า  ก็ระบุ SelectedIndex = -1 ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.scottgu.com/blogposts/diggsample/step3.png"&gt;&lt;img style="cursor: pointer; width: 678px; height: 480px;" src="http://www.scottgu.com/blogposts/diggsample/step3.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ตอนนี้เราก็ได้โปรแกรม silverlight เสร็จขึ้นมาอีกระดับหนึ่งแล้ว(หาข้อมูลได้ แสดงข้อมูลได้) ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.scottgu.com/blogposts/diggsample/step4.png"&gt;&lt;img style="cursor: pointer; width: 662px; height: 359px;" src="http://www.scottgu.com/blogposts/diggsample/step4.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ตอนต่อไปจะเป็นอีก การกำหนด Style เพื่อให้หน้าตาสวยงามขึ้น&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.scottgu.com/blogposts/slbeta1apps/diggsample.zip"&gt;กดปุ่มนี้ จะดาวโหลด source code โปรแกรมที่เสร็จแล้ว&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-8851080965136829425?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/8851080965136829425/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=8851080965136829425' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/8851080965136829425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/8851080965136829425'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/10/silverlight-3-internet-data-grid.html' title='ทำโปรเจ็ก Silverlight ตอนที่ 3 ดึงข้อมูลจาก Internet และแสดงผลใน Data Grid'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-1875277212180262842</id><published>2008-10-18T02:03:00.000-07:00</published><updated>2008-10-24T01:00:03.042-07:00</updated><title type='text'>ทำโปรเจ็ก Silverlight ตอนที่ 2 การจัดวางตำแหน่ง</title><content type='html'>(แปลจาก บล็อกภาษาอังกฤษของ Scottgu &lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-2-using-layout-management.aspx"&gt;ที่นี่&lt;/a&gt;)&lt;br /&gt;&lt;a href="http://www.scottgu.com/blogposts/slbeta1apps/diggsample.zip"&gt;กดปุ่มนี้จะดาวโหลด sourcecode โปรแกรมที่เสร็จแล้ว&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ต่อจากตอนที่แล้ว เราจะมาดูเรื่อง  การจัดวางตำแหน่ง หรือ Layout กัน&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ทำความเข้าใจเรื่อง การจัดวาง Layout&lt;/span&gt;&lt;br /&gt;Silverlight และ WPF ได้ให้ Control ที่จะช่วยโปรแกรมเมอร์จัดวางตำแหน่ง UI ได้อย่างสะดวก โดยจะมีทั้งแบบกำหนดตำแหน่งตายตัว  และแบบที่ให้ Layout จัดการให้&lt;br /&gt;&lt;br /&gt;Layout ที่ใช้ใน Silverlight 2 ได้แก่&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Canvas&lt;/li&gt;&lt;li&gt;StackPanel&lt;/li&gt;&lt;li&gt;Grid&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;การจัดวางแบบ Canvas&lt;/span&gt;&lt;br /&gt;เป็นการจัดวางที่ให้โปรแกรมเมอร์กำหนดตำแหน่งของ Control ที่จะวางบน Canvas ได้อย่างอิสระ  โดยกำหนดพิกัด (ตามแนว x,y) ได้&lt;br /&gt;โดยใช้แอตทริบิว Left แทนตำแหน่ง X   และ แอตทริบิว Top แทนตำแหน่ง Y&lt;br /&gt;ดังตัวอย่างที่จะใส่ปุ่ม Button 2 ปุ่ม ลงบน Canvas ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step33.png"&gt;&lt;img style="cursor: pointer; width: 563px; height: 190px;" src="http://silverlight1blogpost.s3.amazonaws.com/step33.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ซึ่งจะปรากฏผล ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step32.png"&gt;&lt;img style="cursor: pointer; width: 338px; height: 421px;" src="http://silverlight1blogpost.s3.amazonaws.com/step32.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Canvas จะมีประโยชน์ในกรณี ที่ Control จะไม่ขยับตำแหน่ง และขนาดไม่เปลี่ยน&lt;br /&gt;แต่เมื่อตำแหน่งหรือขนาดของ Control เปลี่ยน จะทำให้โปรแกรมเมอร์ต้องมาเปลี่ยนพิกัด จัดใหม่ ให้ดูดี&lt;br /&gt;ในกรณีนี้ ควรจะใช้ Layout แบบอื่น ๆ คือ StackPanel หรือ Grid&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;StackPanel&lt;/span&gt;&lt;br /&gt;StackPanel เป็นการจัดวางที่จะวาง Control ที่อยู่ภายใน   เรียงเป็นตามแนวเดียวกัน  (ตามแนวนอน  หรือตามแนวตั้ง) เช่น&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step37.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step37.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;จะได้ผลดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step36.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step36.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;หากเราจะจัดวางเรียงไปตามแนวนอน  ให้เราเพิ่มแอตทริบิว Orientation="Horizontal" ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step39.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step39.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ได้ผลดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step38.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step38.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;การจัดวางแบบ Grid คือการจัดวางแบบตาราง&lt;br /&gt;คือ การจัดวางที่ยืดหยุ่นที่สุด ทำให้วางในตำแหน่งช่องใดก็ได้ในตาราง และมีขนาดได้มากกว่าหนึ่งช่อง&lt;br /&gt;ดังตัวอย่าง จะ สร้างตารางซึ่งมี 3 คอลัม&lt;br /&gt;โดยเราจะประกาศ คอลัมภ์ ไว้ในแท็ก &lt;columndefinition&gt; 3 อันไว้ใน &lt;grid.columndefinitions&gt;&lt;br /&gt;และประกาศ คอลัมภ์ ไว้ในแท็ก &lt;rowdefinition&gt; 3 อันไว้ใน &lt;grid.rowdefinitions&gt;&lt;br /&gt;&lt;br /&gt;หลังจากนั้น จะใส่ &amp;lt;button&amp;gt; ที่บอกตำแหน่งที่จะใส่ไว้ใน Grid ด้วยแอตทริบิว Grid.Column="x" Grid.Row="y"  ดังนี้&lt;br /&gt;&lt;/grid.rowdefinitions&gt;&lt;/rowdefinition&gt;&lt;/grid.columndefinitions&gt;&lt;/columndefinition&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step40.png"&gt;&lt;img style="cursor: pointer; width: 500px; height: 327px;" src="http://silverlight1blogpost.s3.amazonaws.com/step40.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;จะได้ผลดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step41.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step41.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;นอกจากการระบุพิกัดแบบตายตัว เช่น Height=60 แล้ว&lt;br /&gt;RowDefinition และ ColumnDefinition ยังมีโหมด AutoSize (ปรับขนาดอัตโนมัติ)&lt;br /&gt;เช่น Height="Auto"  จะทำให้ความสูงของ Row นั้น ปรับตามขนาดของ Control ที่อยู่ข้างใน&lt;br /&gt;ซึ่งมีประโยชน์มาก&lt;br /&gt;&lt;br /&gt;นอกจากนั้น ขนาดยังกำหนดให้เป็นสัดส่วนต่อกันได้ด้วย เช่น&lt;br /&gt;&amp;lt;RowDefinition Height="1*"&amp;gt;&lt;br /&gt;&amp;lt;RowDefinition Height="2*"&amp;gt;&lt;br /&gt;&lt;br /&gt;แถวที่สอง จะมีความหนากว่า แถวแรก สองเท่า&lt;br /&gt;&lt;br /&gt;ตัวอย่างการจัดหน้าจอ แบบ Digg(เว็บไซต์ยอดนิยมแห่งหนึ่ง)&lt;br /&gt;เราจะสร้างหน้าจอ ให้เหมือนแบบนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/app1.png"&gt;&lt;img style="cursor: pointer; width: 533px; height: 431px;" src="http://silverlight1blogpost.s3.amazonaws.com/app1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;โดยเราจะสร้างให้มี Grid 2 แถว ก่อน  แถวแรกสูง 40 pixel(จุดสี) แล้วแถวที่สองให้กินที่ที่เหลือทั้งหมด (Height="*")&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step45.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step45.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;โดยเพิ่มแอททริบิว ShowGridLines="True" เพื่อให้เห็นเส้นประ บอกตำแหน่ง&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step44.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step44.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;แล้วเราก็จะใส่ Grid ลงไปในช่องแถวแรกของ Grid นอก  โดยแบ่งเป็น 3 คอลัม ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step47.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step47.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ทำให้เราเห็นการแบ่ง แถวแรกออก  ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step46.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step46.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;โดยช่องแรก เราจะใส่คอนโทรล &amp;lt;Border&amp;gt; โดยหัวมุมให้ตัดมน รัศมี 10&lt;br /&gt;แล้วใส่ข้อความ &amp;lt;TextBlock&amp;gt; ไว้ข้างในอีกที&lt;br /&gt;ช่องถัดมาใส่ &amp;lt;WatermarkedTextBox&amp;gt;&lt;br /&gt;ช่องถัดมาใส่ปุ่ม &amp;lt;Button&amp;gt;&lt;br /&gt;&lt;br /&gt;แล้วในแถวถัดมา ใส่ &amp;lt;TextBlock&amp;gt; ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step49.png"&gt;&lt;img style="cursor: pointer; width: 504px; height: 415px;" src="http://silverlight1blogpost.s3.amazonaws.com/step49.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ได้ผลดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step50.png"&gt;&lt;img style="cursor: pointer; width: 468px; height: 238px;" src="http://silverlight1blogpost.s3.amazonaws.com/step50.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ตอนนี้เรายังจำกัดความกว้างสูงของ หน้า Silverlight ไว้ที่ 600 x 300 อยู่&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step51.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step51.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ทำให้ ถ้าเราถึงหน้าเว็บเพจออกกว้างก็จะเห็น silverligth ไม่เต็มจอ&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step52.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step52.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ให้เราเอาบรรทัด Width="600" Height="300" ออก&lt;br /&gt;ก็จะให้โปรแกรมที่เต็มหน้าจอบราวเซอร์&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step54.png"&gt;&lt;img style="cursor: pointer; width: 536px; height: 268px;" src="http://silverlight1blogpost.s3.amazonaws.com/step54.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;โปรดติดตามตอนต่อไป&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-1875277212180262842?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/1875277212180262842/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=1875277212180262842' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/1875277212180262842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/1875277212180262842'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/10/silverlight-2_18.html' title='ทำโปรเจ็ก Silverlight ตอนที่ 2 การจัดวางตำแหน่ง'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-5437467949716209856</id><published>2008-10-16T23:17:00.000-07:00</published><updated>2008-10-26T23:55:01.215-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Start'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>สร้างโปรเจ็กแรกตอนที่ 1 สำหรับ Silverlight 2 บน Visual Studio 2008 ตอนที่ 1</title><content type='html'>ขอออกตัวไว้ก่อนนะครับ  ว่าบล็อกตอนนี้เป็นตอนที่แปลมาจากบล็อก 8 ตอน ของ Scottcu ซึ่งเป็นภาษาอังกฤษ  &lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-1-creating-quot-hello-world-quot-with-silverlight-2-and-vs-2008.aspx"&gt;ที่นี่&lt;/a&gt;  เพื่อให้อ่านง่ายจึงแปลเป็นภาษาไทยครับ&lt;br /&gt;&lt;br /&gt;1. เปิด VisualStudio 2008 หรือ Visual Web Developer 2008  แล้วเลือกเมนู File -&gt; New Project&lt;br /&gt;2. แล้วเลือก Silverlight Application&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step3.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step3.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;3. เราตั้งชื่อโปรเจ็กว่า DiggSample   เมื่อเรากด OK แล้ว  โปรแกรมจะขึ้นไดอะลอกถามว่า  ต้องการสร้างเพียงโปรเจ็ก Silverlight เพียว ๆ หรือ ต้องการให้ผนวกโปรเจ็กนี้เข้าไปในเว็บ ASP.NET ด้วยเลย&lt;br /&gt;สำหรับตัวอย่างนี้เราจะเลือกผนวกเข้าใน ASP.NET และตั้งชื่อว่า DiggSample_WebServer   เมื่อเราคลิก OK  โปรแกรมก็จะสร้าง โซลูชั่น ซึ่งจะมีทั้งไฟล์ในฝั่ง Client และในฝั่ง Server ให้พร้อมกันในทีเดียว&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step5.png"&gt;&lt;img style="cursor: pointer; width: 200px;" src="http://silverlight1blogpost.s3.amazonaws.com/step5.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;เมื่อเรากด "Build" แล้ว  VisualStudio จะคอมไพล์โปรแกรมของเรา  และนำไปใส่ไว้ใน โปรเจ็กเว็บเซิร์ฟเวอร์ของเราโดยอัตโนมัติ  โดยจะสร้างหน้า ASP และหน้า Html ให้โดยอัตโนมัติ&lt;br /&gt;(โปรแกรม Silverlight รันได้กับเว็บเซิร์ฟเวอร์ทุกชนิด แม้แต่บน Apache&lt;br /&gt;และหน้า Html ที่เราจะใส่ Silverlight เข้าไป ก็เขียนได้จากภาษาใดก็ได้ เช่น PHP,Java ,Python,Ruby)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;มีไฟล์อะไรบ้างใน Silverlight&lt;/span&gt;&lt;br /&gt;เมื่อเราสร้างโปรเจ็กเสร็จใหม่  เราจะได้ไฟล์ Page.xaml และ App.xaml และไฟล์ภาษา (C# หรือ VB ที่่เราได้เลือกไว้) เป็นไฟล์ที่เรียกว่า Code Behide Class file ซึ่งจะคู่กันกับไฟล์ .xaml เช่น (cs คือ C Sharp)&lt;br /&gt;&lt;div style="text-align: center;"&gt;Page.xaml     คู่กับไฟล์     Page.xaml.cs&lt;br /&gt;App.xaml     คู่กับไฟล์     App.xaml.cs&lt;br /&gt;&lt;div style="text-align: left;"&gt;ไฟล์ XAML คือ ไฟล์ XML ชนิดใหม่ เอาไว้สำหรับเขียนกำหนด หน้าตา ของโปรแกรม สำหรับ silverlight หรือ WPF&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;App.xaml&lt;/span&gt; ใช้เขียนเพื่อเก็บ resource ที่จะใช้ร่วมกันทั้งโปรแกรม เช่น Brush(แปรงสี) หรือ Style&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;App.xaml.cs&lt;/span&gt;  ใช้เขียน เพื่อทำงานตอนที่เกิด Event (เหตุการณ์) ต่าง ๆ ที่เกี่ยวกับโปรแกรม  เช่น Application_Startup , Application_Exit ,Application_UnhandledException&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Page.xaml&lt;/span&gt; ใช้เขียนกำหนดหน้าตา UI ของโปรแกรม  โดยเราจะเขียนว่ามี UI Control ใดบ้างที่อยู่บนหน้าโปรแกรม และเชื่อมไปยัง &lt;span style="font-weight: bold;"&gt;Page.xmal.cs&lt;/span&gt; เมื่อเกิด event บน UI เหล่านั้น&lt;br /&gt;&lt;br /&gt;ตั้งแต่ตอนแรกที่คอมไพล์โปรเจ็กเสร็จ  VS จะคอมไพล์หน้า Page.xmal ออกมาเป็นคลาส .NET ครึ่งหนึ่ง  และคอมไพล์ Page.xmal.cs อีกครึ่งหนึ่ง  แล้วนำมารวมเป็นคลาสเดียวกัน&lt;br /&gt;เช่นเดียวกัน คอมไพล์และรวมไฟล์ App.xaml และ App.xmal.cs รวมเป็นอีกหนึ่งคลาส&lt;br /&gt;รวมได้ 2 คลาส  แล้วเอามาแพ็กรวมกัน เป็นไฟล์ DiggSample.xap บนฮาร์ดดิสก์&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step7.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step7.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;  ไฟล์ .xap (อ่านว่า แซ๊บ) ได้ย่อขนาดมาแล้ว ด้วยวิธี Zip ดังนั้นจึงได้ขนาดที่เล็ก&lt;br /&gt;การนำโปรแกรมที่ได้ไปรันบนเว็บ  ก็คือ ปะแท็ก &amp;lt;object&amp;gt; บนหน้าไฟล์ Html (ไม่ต้องใช้ JavaScript) แล้วชี้ไปที่ไฟล์ .xap ง่าย ๆ แค่นั้น&lt;br /&gt;โปรแกรมที่เราเขียนขึ้นจะรันได้  ทั้งบน IE(Internet Explorer),FireFox ,Safari,etc)&lt;br /&gt;และบน Windows, Mac, Linux&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;มาใส่ Control และทำ Event กัน&lt;/span&gt;&lt;br /&gt;ให้เปิดไฟล์ Page.xaml ขึ้นมา  เราจะเพิ่มปุ่ม  โดยใส่แท็ก &amp;lt;Button&amp;gt; เข้าไประหว่างบรรทัด &amp;lt;Grid&amp;gt; และ &amp;lt;/Grid&amp;gt;  ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step8.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step8.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;พอเราเริ่มเขียน &amp;lt;B   แล้ว Intellisense จะขึ้นมาทันที&lt;br /&gt;ให้เลือก Button  แล้วกดเว้นวรรค&lt;br /&gt;เราจะกำหนดชื่อให้ปุ่มนี้ด้วยแอททริบิว  x:Name="MyButton"&lt;br /&gt;กำหนดข้อความบนปุ่ม ด้วย Content="Push Me!"&lt;br /&gt;ความกว้าง 100 สูง 50 ด้วย Width="100" Height="50"&lt;br /&gt;แล้วปิดด้วย /&amp;gt; ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step9.png"&gt;&lt;img style="cursor: pointer; width: 487px; height: 169px;" src="http://silverlight1blogpost.s3.amazonaws.com/step9.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;เมื่อเราคอมไพล์และสั่ง Run แล้วจะปรากฏหน้าตา ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step10.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step10.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;เราจะใส่ event ชื่อว่า "Click"ให้กับปุ่มนี้ ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step12.png"&gt;&lt;img style="cursor: pointer; width: 619px; height: 66px;" src="http://silverlight1blogpost.s3.amazonaws.com/step12.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;เมื่อ VS ขึ้น ช่อง new event handler แล้ว  ให้กดปุ่ม Enter&lt;br /&gt;จะปรากฏ method ชื่อดีฟอลท์ว่า MyButton_Click ขึ้นที่ไฟล์ Page.xaml.cs&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step13.png"&gt;&lt;img style="cursor: pointer; width: 502px; height: 30px;" src="http://silverlight1blogpost.s3.amazonaws.com/step13.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step15.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step15.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ให้เราเขียนคำสั่งใน Method นั้นว่า   MyButton.Content = "Pushed!"&lt;br /&gt;(เปลี่ยนข้อความบนปุ่มให้เป็น Pushed!)&lt;br /&gt;หลังจากที่คอมไพล์ใหม่แล้วรัน จะปรากฏหน้าเดิม&lt;br /&gt;แต่เมื่อเรากดปุ่ม  ข้อความบนปุ่มจะเปลี่ยนเป็น "Pushed!"&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silverlight1blogpost.s3.amazonaws.com/step16.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://silverlight1blogpost.s3.amazonaws.com/step16.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-5437467949716209856?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/5437467949716209856/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=5437467949716209856' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/5437467949716209856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/5437467949716209856'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/10/silverlight-2-visual-studio-2008-1.html' title='สร้างโปรเจ็กแรกตอนที่ 1 สำหรับ Silverlight 2 บน Visual Studio 2008 ตอนที่ 1'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-6825670193233302627</id><published>2008-10-16T03:42:00.000-07:00</published><updated>2008-10-16T03:55:27.069-07:00</updated><title type='text'>Silverlight 2 ตัวจริง(เต็ม ๆ) ออกแล้ว</title><content type='html'>Silverlight 2 ตัวเต็ม  ต่างจากตัวก่อนที่เป็นตัวสำหรับโปรแกรมเมอร์  ท่านที่เขียนโปรแกรมด้วยตัวใหม่นี้  จะรันได้บนเครื่อง User ได้จริง ๆ&lt;br /&gt;   การติดตั้งเริ่มจาก&lt;br /&gt;&lt;ol&gt;&lt;li&gt; ให้ Uninstall Silverlight ตัวเก่าที่มีทั้งหมดออกก่อน&lt;/li&gt;&lt;li&gt;ติดตั้ง Visual Studio 2008 SP1  หรือ&lt;a href="http://www.microsoft.com/express/vwd/"&gt; Visual Web Developer Express SP1&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ติดตั้ง &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=c22d6a7b-546f-4407-8ef6-d60c8ee221ed&amp;amp;displaylang=en"&gt;Silverlight Tools for Visual Studio 2008 SP1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;ติดตั้ง &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=EB9B5C48-BA2B-4C39-A1C3-135C60BBBE66&amp;amp;displaylang=en"&gt;Microsoft Expression Blend 2 Service Pack 1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;ติดตั้ง &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=457B17B7-52BF-4BDA-87A3-FA8A4673F8BF&amp;amp;displaylang=en"&gt;DeepZoom Composer&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-6825670193233302627?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/6825670193233302627/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=6825670193233302627' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/6825670193233302627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/6825670193233302627'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/10/silverlight-2.html' title='Silverlight 2 ตัวจริง(เต็ม ๆ) ออกแล้ว'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-2779954900658201047</id><published>2008-10-01T06:25:00.000-07:00</published><updated>2008-10-01T07:33:41.536-07:00</updated><title type='text'>การจัดวาง Layout แบบต่าง ๆ</title><content type='html'>WPF มีการจัดวาง Layout อยู่ 5 ชนิด คือ&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Grid  คือ การจัดวางแบบตาราง (เหมือน OX หรือ Excel)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;StackPanel คือ การจัดวางเรียงเป็นแนวเดียวกัน (เหมือนอาเรย์)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;WrapPanel คือ การจัดวางเรียงเป็นแนวเดียวกัน เช่นเดียวกับ StackPanel แต่ต่างตรงที่ หาก Object ที่เราวาง ได้เลยระยะความกว้างของ WrapPanel ไป    มันจะเหมือนขึ้นบรรทัดใหม่ เป็นอีกแถว&lt;/li&gt;&lt;li&gt;DockPanel  คืือ การจัดวางที่(เหมือนกับ toolbar) (เลือกแปะ Object บน DockPanel ได้ 4 ด้าน คือ บน ล่าง ซ้าย ขวา&lt;/li&gt;&lt;li&gt;Canvas อันนี้เราจะวาง Object บน Canvas ได้อย่างอิสระ (ไม่ต้องเรียง ไม่ต้องติดขอบ) โดยกำหนด X Y ได้อย่างเสรี&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-2779954900658201047?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/2779954900658201047/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=2779954900658201047' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/2779954900658201047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/2779954900658201047'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/10/layout.html' title='การจัดวาง Layout แบบต่าง ๆ'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-1254342891083032287</id><published>2008-09-29T05:53:00.000-07:00</published><updated>2008-09-29T06:24:03.179-07:00</updated><title type='text'>WPF : ใส่ข้อความยาว ๆ ใน TextBlock</title><content type='html'>จากตอนที่แล้วเราได้สร้าง TextBlock ง่าย ๆ ขึ้นมา  โดยที่ข้อความ จะอยู่ใน Text="Hello"&lt;br /&gt;หากต้องการใส่ข้อความที่ยาว ๆ ให้ใส่ไว้ภายในบล็อก ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_c0tjnzgh2F0/SODWhDxjyvI/AAAAAAAAAF0/1NIQnZa6ibQ/s1600-h/d_4_txt1.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_c0tjnzgh2F0/SODWhDxjyvI/AAAAAAAAAF0/1NIQnZa6ibQ/s400/d_4_txt1.JPG" alt="" id="BLOGGER_PHOTO_ID_5251433028951198450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ถ้าเราต้องการให้คำว่า This is a good day. เป็นตัวหนา ให้ใส่แท็ก&lt;bold&gt;&lt;/bold&gt; &amp;lt;Bold&amp;gt; ครอบ&lt;br /&gt;และถ้าเราต้องการให้คำว่า How are you? เป็นตัวเอียง ให้ใส่แท็ก &amp;lt;Italic&amp;gt;&lt;italic&gt;&lt;/italic&gt; ครอบ&lt;br /&gt;และถ้าเราต้องการให้คำว่า Happy new year. ถูกขีดเส้นใต้ ให้ใส่แท็ก &amp;lt;Underline&amp;gt;&lt;underline&gt;&lt;/underline&gt; ครอบ&lt;br /&gt;ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_c0tjnzgh2F0/SODVhAFvMdI/AAAAAAAAAFk/x9Pf5EOKyvM/s1600-h/d_4_txt2.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_c0tjnzgh2F0/SODVhAFvMdI/AAAAAAAAAFk/x9Pf5EOKyvM/s400/d_4_txt2.JPG" alt="" id="BLOGGER_PHOTO_ID_5251431928450462162" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-1254342891083032287?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/1254342891083032287/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=1254342891083032287' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/1254342891083032287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/1254342891083032287'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/09/wpf-textblock.html' title='WPF : ใส่ข้อความยาว ๆ ใน TextBlock'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_c0tjnzgh2F0/SODWhDxjyvI/AAAAAAAAAF0/1NIQnZa6ibQ/s72-c/d_4_txt1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-4105907259349697159</id><published>2008-09-24T05:40:00.000-07:00</published><updated>2008-09-24T09:30:03.105-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TextBlock'/><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Blend'/><title type='text'>มาเขียนข้อความด้วย TextBlock กันเถอะ</title><content type='html'>ใน &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNo3UJaPnxI/AAAAAAAAAEs/TcAnOWkHuy0/s1600-h/d_3_txbk_1.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 167px; height: 151px;" src="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNo3UJaPnxI/AAAAAAAAAEs/TcAnOWkHuy0/s400/d_3_txbk_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5249569134916640530" border="0" /&gt;&lt;/a&gt;WPF มี Control ที่เกี่ยวกับข้อความอยู่หลายตัว  แต่ในตอนนี้จะพูดถึงตัวที่ basic ที่สุด คือ TextBlock&lt;br /&gt;เมื่ออยู่ใน Blend ให้กดปุ่ม toolbar ด้ายซ้าย ตรงที่เป็นสี่เหลี่ยมแล้วมีตัว T อยู่ข้างใน ค้างไว้ แล้วเครื่องมือที่ซ่อนอยู่ ก็จะเด้งออกมา&lt;br /&gt;ให้เลือก TextBlock&lt;br /&gt;&lt;br /&gt;ให้คลิกลาก บนจอ ArtBoard&lt;br /&gt;&lt;br /&gt;แล้วจะเห็นดังนี้&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNo4tS5KRnI/AAAAAAAAAE8/B_XtcDK7MXM/s1600-h/d_3_txbk_2.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNo4tS5KRnI/AAAAAAAAAE8/B_XtcDK7MXM/s200/d_3_txbk_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5249570666470590066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ให้พิมพ์ข้อความเช่น Hello ข้อความนั้นก็จะแสดง&lt;br /&gt;อยู่ในกรอบของ TextBlock&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_c0tjnzgh2F0/SNo53p0cw6I/AAAAAAAAAFE/5neQqI4rBYg/s1600-h/d_3_txbk_3.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_c0tjnzgh2F0/SNo53p0cw6I/AAAAAAAAAFE/5neQqI4rBYg/s200/d_3_txbk_3.JPG" alt="" id="BLOGGER_PHOTO_ID_5249571943935165346" border="0" /&gt;&lt;/a&gt;ในมุมของ XAML จะเห็นดังนี้&lt;br /&gt;Text="Hello" ข้อความที่แสดงคือ Hello&lt;br /&gt;HorizontalAlignment="Left" คือ จัดข้อความชิดซ้าย&lt;br /&gt;TextWrapping="Wrap" คือ หากข้อความยาวเกินไป จะตัดคำ ขึ้นบรรทัดใหม่&lt;br /&gt;&lt;br /&gt;ให้ลองเพิ่ม attribute ดังนี้&lt;br /&gt;  Background="Yellow"   พื้นหลัง สีเหลือง&lt;br /&gt;  Foreground="Brown"    ตัวหนังสือ สีน้ำตาล&lt;br /&gt;  FontFamily="Tahoma"   ฟอนต์ ชือ Tahoma&lt;br /&gt;  FontSize="26" ขนาดอักษร=26&lt;br /&gt;ซึ่งจะสัมพันธ์กับใน Blend (วงกลมสีแดง)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNpAwGVML2I/AAAAAAAAAFU/Ha3gZGtYLjk/s1600-h/d_3_txbk_4.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNpAwGVML2I/AAAAAAAAAFU/Ha3gZGtYLjk/s400/d_3_txbk_4.JPG" alt="" id="BLOGGER_PHOTO_ID_5249579510731124578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_c0tjnzgh2F0/SNo4adrNpEI/AAAAAAAAAE0/-SC5Rf1Edc4/s1600-h/d_3_txbk_2.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-4105907259349697159?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/4105907259349697159/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=4105907259349697159' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/4105907259349697159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/4105907259349697159'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/09/textblock.html' title='มาเขียนข้อความด้วย TextBlock กันเถอะ'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_c0tjnzgh2F0/SNo3UJaPnxI/AAAAAAAAAEs/TcAnOWkHuy0/s72-c/d_3_txbk_1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-7504233068665731568</id><published>2008-09-22T20:35:00.000-07:00</published><updated>2008-09-24T05:40:14.416-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gradient'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Linear'/><category scheme='http://www.blogger.com/atom/ns#' term='Brush'/><category scheme='http://www.blogger.com/atom/ns#' term='Blend'/><title type='text'>การระบายสีแบบไล่เฉดแนวตรง LinearGradientBrush ตอนที่ 2</title><content type='html'>จากตอนที่แล้ว  ที่เราได้ระบายสีวงกลม&lt;br /&gt;เราสามารถกำหนดทิศทางของการเกลี่ยสี ได้โดยใช้ Toolbox ด้านข้างซ้าย ชื่อว่า Brush Transform&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNhlibtVHUI/AAAAAAAAAEM/dOOwxsRO20M/s1600-h/3_linear_grad_1.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNhlibtVHUI/AAAAAAAAAEM/dOOwxsRO20M/s320/3_linear_grad_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5249057007928155458" border="0" /&gt;&lt;/a&gt;โดยไปคลิกลากบนรูปวงกลม&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;จะเห็นภาพ ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_c0tjnzgh2F0/SNhmjHcEqQI/AAAAAAAAAEU/lsOcFKabwlg/s1600-h/d_3_LineGrad_2.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_c0tjnzgh2F0/SNhmjHcEqQI/AAAAAAAAAEU/lsOcFKabwlg/s320/d_3_LineGrad_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5249058119178561794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;โดยจะมีลูกศรเกิดขึ้น บอกทิศทางสี&lt;br /&gt;ท้ายลูกศร คือ สีเริ่มต้น&lt;br /&gt;หัวลูกศร คือ สีสิ้นสุด&lt;br /&gt;&lt;br /&gt;ถ้าเราคลิกลากที่ หัวหรือท้ายลูกศร  จะเปลี่ยนทิศทางลูกศร&lt;br /&gt;ลองย้ายเล่น เพื่อดูผลของมัน&lt;br /&gt;&lt;br /&gt;นอกจากนั้น เราสามารถกำหนดจุดสี(GradientStop) ได้มากกว่า 2 จุด&lt;br /&gt;เช่น ถ้าเราจะเปลี่ยนสี จาก  แดง-&amp;gt;น้ำเงิน-&amp;gt;เหลือง  ให้เราเพิ่มจุดสี ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_c0tjnzgh2F0/SNho6MBUpzI/AAAAAAAAAEc/COwYanWFqSs/s1600-h/d_3_LineGrad_3.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_c0tjnzgh2F0/SNho6MBUpzI/AAAAAAAAAEc/COwYanWFqSs/s400/d_3_LineGrad_3.JPG" alt="" id="BLOGGER_PHOTO_ID_5249060714568787762" border="0" /&gt;&lt;/a&gt;โดยกดที่จุดซ้าย (วงกลมแดง)&lt;br /&gt;แล้วเลือกสีแดง&lt;br /&gt;&lt;br /&gt;กดตรงกลาง(วงกลมแดง)&lt;br /&gt;แล้วเลือกสีน้ำเงิน&lt;br /&gt;&lt;br /&gt;กดที่จุดขวา (วงกลมแดง)&lt;br /&gt;แล้วเลือกสีเหลือง&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-7504233068665731568?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/7504233068665731568/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=7504233068665731568' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/7504233068665731568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/7504233068665731568'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/09/lineargradientbrush-2.html' title='การระบายสีแบบไล่เฉดแนวตรง LinearGradientBrush ตอนที่ 2'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_c0tjnzgh2F0/SNhlibtVHUI/AAAAAAAAAEM/dOOwxsRO20M/s72-c/3_linear_grad_1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-8633161392185763898</id><published>2008-09-22T02:07:00.000-07:00</published><updated>2008-09-22T21:02:37.119-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gradient'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='Expression'/><category scheme='http://www.blogger.com/atom/ns#' term='Color'/><category scheme='http://www.blogger.com/atom/ns#' term='Solid'/><category scheme='http://www.blogger.com/atom/ns#' term='Linear'/><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Circle'/><category scheme='http://www.blogger.com/atom/ns#' term='Ellipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Blend'/><title type='text'>ลองสร้างวงกลมบน WPF และการไล่เฉดสี ตอนที่ 1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNdhTSWlh1I/AAAAAAAAAC8/TnPw6gnwQyw/s1600-h/d_2_ell_1.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNdhTSWlh1I/AAAAAAAAAC8/TnPw6gnwQyw/s320/d_2_ell_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5248770874695583570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;พักเรื่องสีไว้ก่อน  ตอนนี้เรามาดูเรื่องวงกลม กันบ้าง&lt;br /&gt;ลองเปิด Blend ขึ้นมา&lt;br /&gt;แล้วคลิกค้างที่ ToolBar ตรงรูปสี่เหลื่ยมซักพัก&lt;br /&gt;จะเห็น เครื่องมือ วงกลมที่ซ่อนอยู่ เด้งออกมา&lt;br /&gt;&lt;br /&gt;ให้เอาไปคลิกลาก บน artboard จะเห็นเป็นรูปวงรีขึ้นมา&lt;br /&gt;หากต้องการให้เป็นรูปวงกลมเด๊ะ ๆ ให้กดปุ่ม shift ค้างไว้ขณะลาก&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNdinicMuPI/AAAAAAAAADE/hiORAw9z0sM/s1600-h/d_2_ell_2.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNdinicMuPI/AAAAAAAAADE/hiORAw9z0sM/s400/d_2_ell_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5248772322123102450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;จะได้รูปและ xaml ดังนี้&lt;br /&gt;สังเกตุว่าจะคล้ายกับรูปสี่เหลี่ยมเลย ต่างกันตรงที่ใช้ tag ว่า Ellipse&lt;br /&gt;ทีนี้เรามาดูเรื่องสีให้ละเอียดกันอีกนิด&lt;br /&gt;ช่อง Fill="Red"  Stroke="Blue" เราสามารถเขียนอีกแบบได้ ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNdlYc1iGRI/AAAAAAAAADM/Br5fnBEEDuo/s1600-h/d_2_ell_3.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNdlYc1iGRI/AAAAAAAAADM/Br5fnBEEDuo/s400/d_2_ell_3.JPG" alt="" id="BLOGGER_PHOTO_ID_5248775361455593746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;คือ การใส่ Brush(แปรงสี)  ชนิด SolidColorBrush  สีทึบ ที่เป็นสีแดง เข้าไปใน Fill&lt;br /&gt;และ ใส่ Brush(แปรงสี)  ชนิด SolidColorBrush  สีทึบ ที่เป็นสีน้ำเงิน เข้าไปใน Stroke นั่นเอง&lt;br /&gt;&lt;br /&gt;Brush(แปรงสี) มีหลายชนิด ดังนี้&lt;br /&gt;&lt;ol&gt;&lt;li&gt;SolidColorBrush  แปรงสีทึบ(สีเดียว)&lt;/li&gt;&lt;li&gt;LinearGradientBrush แปรงสี  ที่ไล่เฉดสี เป็นทางตรง (ตอนนี้ เราจะมาดูชนิดนี้กัน)&lt;/li&gt;&lt;li&gt;RadialGradientBrush แปรงสี ที่ไล่เฉดสี ไปตามรัศมี (จะกล่าวถึงอีกทีในภายหลัง)&lt;/li&gt;&lt;li&gt;ImageBrush แปรง ที่ใช้ภาพ(Image) ปะเอาแทน (จะกล่าวถึงอีกทีในภายหลัง)&lt;/li&gt;&lt;li&gt;DrawingBrush แปรง ที่ใช้รูปร่างที่ได้จากการวาดด้วย Wpf มาวาดลงบนแปรง (จะกล่าวถึงอีกทีในภายหลัง)&lt;/li&gt;&lt;li&gt;VisualBrush แปรง (คล้ายกับ DrawingBrush) ที่ใช้ภาพที่ปรากฏของรูปร่างที่ได้จากการวาดด้วย Wpf  (จะกล่าวถึงอีกทีในภายหลัง)&lt;/li&gt;&lt;/ol&gt;ลอง LinearGradiantBrush กัน&lt;br /&gt;คลิกที่รูปวงกลมที่ได้สร้างขึ้น ใน Blend&lt;br /&gt;แล้วไปดู Property ด้านข้างขวา&lt;br /&gt;ดูคลิกที่ Brush  เสร็จแล้ว ดูคลิกที่ Fill แล้วคลิกที่รูปสี่เหลี่ยมที่มีการไล่เฉด (ตรงวงกลมสีแดงกลางภาพ)&lt;br /&gt;เป็นการเลือกว่าเราจะเอาแบบ ไล่เฉด&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNdqQjXZaII/AAAAAAAAADc/OhGDS9XywEs/s1600-h/d_2_linear_grad_1.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNdqQjXZaII/AAAAAAAAADc/OhGDS9XywEs/s400/d_2_linear_grad_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5248780723327428738" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNdthjyInHI/AAAAAAAAADk/D9iAeb6HBJ4/s1600-h/d_2_linear_grad_2.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNdthjyInHI/AAAAAAAAADk/D9iAeb6HBJ4/s400/d_2_linear_grad_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5248784314032233586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;แล้วเลือกด้านล่างซ้ายสุด (ตรงจุด C ที่เป็นสี่เหลี่ยม = linear,วงกลม = Radial)&lt;br /&gt;เสร็จแล้วจะปรากฏแถบไล่เฉดสี (จากภาพ ตรงที่วงกลมสีแดง วงไว้ที่ซ้ายสุด --- ขวาสุด)&lt;br /&gt;ตอนนี้เป็นการไล่เฉดสีดำไปเป็นสีขาว&lt;br /&gt;ถ้าต้องการเปลี่ยนเป็นไล่เฉด จาก สี  เหลือง ไปเป็น น้ำเงิน&lt;br /&gt;ให้คลิกที่ รูปบ้าน(ที่วงกลมสีแดงไว้)ทางซ้าย  แล้วค่อยเลือกสี เหลือง ในช่องสีรุ้ง(วงกลมแดง B)&lt;br /&gt;แล้วคลิกระดับสี (วงกลมแดง A)&lt;br /&gt;แล้ว คลิกที่ รูปบ้าน(ที่วงกลมสีแดงไว้)ทางขวา แล้วค่อยเลือกสี น้ำเงิน ในช่องสีรุ้ง(B) แล้วคลิกระดับสี(A)&lt;br /&gt;จะได้ผลดังภาพด้านขวานี้&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-8633161392185763898?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/8633161392185763898/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=8633161392185763898' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/8633161392185763898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/8633161392185763898'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/09/wpf_22.html' title='ลองสร้างวงกลมบน WPF และการไล่เฉดสี ตอนที่ 1'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_c0tjnzgh2F0/SNdhTSWlh1I/AAAAAAAAAC8/TnPw6gnwQyw/s72-c/d_2_ell_1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-7982162515488058777</id><published>2008-09-19T04:12:00.000-07:00</published><updated>2008-09-21T20:30:14.549-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Color'/><category scheme='http://www.blogger.com/atom/ns#' term='Margin'/><category scheme='http://www.blogger.com/atom/ns#' term='Width'/><category scheme='http://www.blogger.com/atom/ns#' term='Height'/><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Stroke'/><category scheme='http://www.blogger.com/atom/ns#' term='Fill'/><category scheme='http://www.blogger.com/atom/ns#' term='Rectangle'/><title type='text'>มาต่อกันเรื่อง XAML ของสี่เหลี่ยมใน WPF</title><content type='html'>มาดูรายละเอียดเพิ่มขึ้นกันดีกว่า&lt;br /&gt;&amp;lt;Rectangle Margin="160,28,0,0"&lt;br /&gt;             Width="100" Height="50" /&amp;gt;&lt;br /&gt;&lt;br /&gt;attribute ชื่อ Margin คือ ระยะห่างระหว่าง สี่เหลี่ยมกับขอบของหน้าต่าง เท่ากับว่า&lt;br /&gt;สี่เหลี่ยมนี้ห่างจากขอบซ้าย 160 ห่างจากขอบบน 28&lt;br /&gt;ห่างจากขอบล่าง 0 ห่างจากขอบขวา 0&lt;br /&gt;สังเกตุว่า Width กับ Height อยู่คนละบรรทัดกับ Margin&lt;br /&gt;เพราะว่า XML ไม่ถือเรื่องการขึ้นบรรทัดใหม่ (ถือว่าเป็นบรรทัดเดียวกัน)&lt;br /&gt;แต่จะให้ความสำคัญกับเรื่องวงเล็บ &amp;lt; &amp;gt; มากกว่า&lt;br /&gt;&lt;br /&gt;attribute สามารถดึงออกมาใส่ภายใน Tag ได้ โดย xaml ด้านบน แปลงเป็นแบบด้านล่างได้ ดังนี้&lt;br /&gt;&amp;lt;Rectangle Margin="160,28,0,0" &amp;gt;&lt;br /&gt;             &amp;lt;Rectangle.Width&amp;gt;&lt;br /&gt;                              100&lt;br /&gt;             &amp;lt;/Rectangle.Width&amp;gt;&lt;br /&gt;&lt;br /&gt;             &amp;lt;Rectangle.Height&amp;gt;&lt;br /&gt;                                 50&lt;br /&gt;             &amp;lt;/Rectangle.Height&amp;gt;&lt;br /&gt;&amp;lt;/Rectangle&amp;gt;&lt;br /&gt;&lt;br /&gt;เรามาลองเติมสีให้กับสี่เหลี่ยม เช่่น เราจะให้สี่เหลี่ยมมีสีเหลือง และมีขอบสีน้ำเงิน ได้ดังนี้&lt;br /&gt;&amp;lt;Rectangle Width="100" Height="50"&lt;br /&gt;      Fill="Yellow" Stroke="Blue" /&amp;gt;&lt;br /&gt;&lt;br /&gt;เมื่อท่านเห็น xaml ด้านบน ก็คงทราบทันทีว่า&lt;br /&gt;    attribute ที่ชื่อว่า Fill ใช้สำหรับระบุสี(หรือแปรง)ของสี่เหลี่ยม&lt;br /&gt;    attribute ที่ชื่อว่า Stroke ใช้สำหรับระบุสี ของขอบนั่นเอง&lt;br /&gt;บางท่านอาจจะสงสัยว่าเรามีสีอะไรบ้างให้เลือก&lt;br /&gt; ตอบว่า หากเราเข้าโปรเจ็กโดย VisualStudio แล้ว&lt;br /&gt;              เมื่อเราพิมพ์ Fill= เสร็จ  VisualStudio จะแสดงรายชื่อสีให้เลือกทันที ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_c0tjnzgh2F0/SNPj1sfGxcI/AAAAAAAAACI/LwkifHluU1M/s1600-h/d_1_rect_5.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_c0tjnzgh2F0/SNPj1sfGxcI/AAAAAAAAACI/LwkifHluU1M/s320/d_1_rect_5.JPG" alt="" id="BLOGGER_PHOTO_ID_5247788502430959042" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNcQCx0j9pI/AAAAAAAAACQ/Te0gaIpH0hU/s1600-h/d_1_rect_color1.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNcQCx0j9pI/AAAAAAAAACQ/Te0gaIpH0hU/s320/d_1_rect_color1.JPG" alt="" id="BLOGGER_PHOTO_ID_5248681530643183250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;นอกจากการใส่ชื่อสี โดยตรงแล้ว(เช่น "Blue")  เรายังใส่ค่ารหัสสีได้ด้วย&lt;br /&gt;(ความเข้มใส,ความเข้มสีแดง,ความเข้มสีเขียว,ความเข้มสีน้ำเงิน) คือ ARGB&lt;br /&gt;เช่นหากเราต้องการสีแดงเข้ม  เราจะเขียนว่า #ffff0000&lt;br /&gt;ff ตัวแรกเป็นเลขฐาน 16 มีค่าเท่ากับ 255 แปรว่า เข้มเต็มที่ (ไม่ใส)&lt;br /&gt;ff ตัวที่สองเป็นเลขฐาน 16 มีค่าเท่ากับ 255 แปรว่า สีแดงเต็ม&lt;br /&gt;00 ตัวที่สองเป็นเลขฐาน 16 มีค่าเท่ากับ 0 แปรว่า ไม่มีสีเขียวผสม&lt;br /&gt;00 ตัวที่สองเป็นเลขฐาน 16 มีค่าเท่ากับ 0 แปรว่า ไม่มีสีน้ำเงินผสม&lt;br /&gt;&lt;br /&gt;สมมติว่า ถ้าเราต้องการสีเหลือง เราก็ใช้  สีแดงเต็ม กับ สีเขียวเต็ม รวมกัน เป็น#ffffff00 เป็นต้น&lt;br /&gt;แต่ไม่ต้องตกใจไปครับ  เพราะ Blend มีเครื่องมือเลือกสีที่เข้าใจง่ายมากครับ ดังนี้&lt;br /&gt;เมื่อคลิกที่สี่เหลี่ยมแล้ว ให้ไปดูที่หน้าต่างข้างขวา  คลิกแท็บ Property&lt;br /&gt;แล้วเลือกเฉดสี (ที่แถบสีรุ้ง) แล้วเลือกความเข้มสี (จากจอด้านซ้าย)&lt;br /&gt;เมื่อเลือกแล้วจะเห็นเป็นรหัสด้านล่าง เช่น #ffffff00&lt;br /&gt;หากต้องการให้สี่เหลี่ยมของเราใส มองเห็นทะลุไปถึงพื้นหลัง  ก็ให้กำหนดค่า A ให้น้อยกว่า 100% แต่ถ้ากำหนดเป็น 0% เราก็จะไม่เห็นสี่เหลี่ยมไปเลย&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-7982162515488058777?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/7982162515488058777/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=7982162515488058777' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/7982162515488058777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/7982162515488058777'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/09/xaml-wpf.html' title='มาต่อกันเรื่อง XAML ของสี่เหลี่ยมใน WPF'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_c0tjnzgh2F0/SNPj1sfGxcI/AAAAAAAAACI/LwkifHluU1M/s72-c/d_1_rect_5.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-4375718493479146874</id><published>2008-09-17T23:52:00.000-07:00</published><updated>2008-09-22T21:05:15.887-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Width'/><category scheme='http://www.blogger.com/atom/ns#' term='Height'/><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Attribute'/><category scheme='http://www.blogger.com/atom/ns#' term='Handle'/><category scheme='http://www.blogger.com/atom/ns#' term='Tag'/><category scheme='http://www.blogger.com/atom/ns#' term='Rectangle'/><category scheme='http://www.blogger.com/atom/ns#' term='Blend'/><title type='text'>ลองสร้างสี่เหลี่ยมแรกบน WPF</title><content type='html'>เริ่มต้น เรามาเปิดโปรเจ็กที่เราทำทิ้งไว้เมื่อคราวที่แล้ว ด้วย Blend&lt;br /&gt;แล้วกดที่ Toolbar รูปสี่เหลี่ยม&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNH8ouUnpgI/AAAAAAAAABY/yxcy7MWe0U4/s1600-h/d_1_recttool.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNH8ouUnpgI/AAAAAAAAABY/yxcy7MWe0U4/s320/d_1_recttool.JPG" alt="" id="BLOGGER_PHOTO_ID_5247252817422820866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;นี่คือ เครื่องมือสร้างสี่เหลี่ยม&lt;br /&gt;เมื่อกดแล้ว  ให้ไปกดบน ArtBoard แล้วลากรูปสี่เหลี่ยมแล้วปล่อย&lt;br /&gt;เราก็จะได้รูปสี่เหลี่ยมง่าย ๆ ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNH-DdL7tVI/AAAAAAAAABg/_62yefGzEnc/s1600-h/d_1_rect_1.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNH-DdL7tVI/AAAAAAAAABg/_62yefGzEnc/s320/d_1_rect_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5247254376191079762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ลองดูรูปสี่เหลี่ยมด้านบน จะมีรูป สี่เหลี่ยมเล็ก ๆ อยู่ที่ขอบและมุมทั้ง 4 ด้าน เรียกว่า Handle เมื่อเอาเมาส์วางบน handle จะเห็นลูกศร&lt;br /&gt;เมื่อให้เมาส์กดลากที่ handle จะเป็นการขยายหรือย่อรูปสี่เหลี่ยม ตามใจต้องการ&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_c0tjnzgh2F0/SNH_v7KvFKI/AAAAAAAAABo/cXZowkOwm-4/s1600-h/d_1_rect_2.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_c0tjnzgh2F0/SNH_v7KvFKI/AAAAAAAAABo/cXZowkOwm-4/s320/d_1_rect_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5247256239664993442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;แต่ถ้าเขยิบเมาส์ออกมานิดนึง ไอคอนลูกศรจะเปลี่ยนไป ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNIBUVJi6aI/AAAAAAAAABw/IZ9RGNH40UM/s1600-h/d_1_rect_3.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNIBUVJi6aI/AAAAAAAAABw/IZ9RGNH40UM/s320/d_1_rect_3.JPG" alt="" id="BLOGGER_PHOTO_ID_5247257964626241954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;หากกดที่ลูกศรโค้งแล้วเลื่อนเมาส์  จะเป็นการหมุนรูปสี่เหลี่ยม  โดยมีจุดวงกลมตรงกลางเป็นจุดศูนย์กลาง เราสามารถกดที่จุดวงกลม แล้วเปลี่ยนจุดหมุนได้&lt;br /&gt;หากกดที่เครื่องหมาย &lt; / &gt; แล้ว จะเป็นดึงรูปสี่เหลี่ยม ให้เฉ เป็นรูปสี่เหลี่ยมขนมเปียกปูน&lt;br /&gt;&lt;br /&gt;ตรงหัวมุมด้านซ้ายบน  ท่านจะเห็นเส้นประแล้วมีวงกลมที่ปลาย  2 เส้น   0-----&lt;br /&gt;เมื่อท่านกดแล้วลากตรงวงกลมนั้น   จะเป็นการ ทำเกลามุม ของสี่เหลี่ยม ให้มนขึ้น ดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_c0tjnzgh2F0/SNIFkO9GNPI/AAAAAAAAAB4/32IsMMHOdNk/s1600-h/d_1_rect_4.JPG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_c0tjnzgh2F0/SNIFkO9GNPI/AAAAAAAAAB4/32IsMMHOdNk/s320/d_1_rect_4.JPG" alt="" id="BLOGGER_PHOTO_ID_5247262635887834354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;หากไม่ต้องการรูปนั้นแล้ว ให้กดปุ่ม Backspace หรือ Del จะเป็นการลบออก&lt;br /&gt;&lt;br /&gt;ตอนนี้ให้เราลบสี่เหลี่ยมเดิมออก  แล้วเริ่มสร้างสี่เหลี่ยมขึ้นอีกครั้ง&lt;br /&gt;ตอนนี้เราอยู่ในโหมด Design ให้กดแท็บ XAML หรือ Split เพื่อดูรูปสี่เหลี่ยมในมุมมองของโค้ด XAML บ้าง&lt;br /&gt;จะเห็นโค้ด XAML ดังนี้  (อย่าเพิ่งตกใจ เดี๋ยวจะอธิบายให้ฟังอย่างง่าย ๆ)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNIKR3bwJeI/AAAAAAAAACA/cMPPMFczeGM/s1600-h/d_1_rect_xaml_1.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_c0tjnzgh2F0/SNIKR3bwJeI/AAAAAAAAACA/cMPPMFczeGM/s320/d_1_rect_xaml_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5247267817894454754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ให้สังเกตุ ตัวหนังสือสีแดง  เป็นการระบุว่า ตัวหนังสือสีแดง นั้นคือ  tag หรือ attribute ส่วนตัวหนังสือสีน้ำเงินนั้น คือ ค่าของข้อมูล&lt;br /&gt;เช่น&lt;br /&gt;&amp;lt;Rectangle Width="100" Height="50"&amp;gt;&lt;br /&gt;&amp;lt;/Rectangle&amp;gt;&lt;br /&gt;&lt;br /&gt;คำว่า Rectangle คือ Tag ที่ใช้บอกว่าเป็นสี่เหลี่ยม&lt;br /&gt;Width คือ attribute มีความหมายว่า  ความกว้าง&lt;br /&gt;Height="50" คือ บอกว่า สี่เหลี่ยมนี้มีความสูง 50 หน่วย&lt;br /&gt;&lt;br /&gt;เมื่อมี Tag เปิดแล้วก็ต้องมี Tag ปิด คือ &amp;lt;/Rectangle&amp;gt;&lt;br /&gt;&lt;br /&gt;ถ้าจะเขียนโดยไม่ให้มี Tag ปิด ต้องเอาเครื่องหมาย / ไปใส่ไว้ท้าย Tag&lt;br /&gt;ดังนี้  &amp;lt;Rectangle Width="100" Height="50" /&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-4375718493479146874?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/4375718493479146874/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=4375718493479146874' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/4375718493479146874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/4375718493479146874'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/09/wpf_17.html' title='ลองสร้างสี่เหลี่ยมแรกบน WPF'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_c0tjnzgh2F0/SNH8ouUnpgI/AAAAAAAAABY/yxcy7MWe0U4/s72-c/d_1_recttool.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-9219723710793444558</id><published>2008-09-16T23:13:00.001-07:00</published><updated>2008-09-16T23:49:20.384-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Start'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>สร้างโปรเจ็ก WPF ด้วย Visual Studio</title><content type='html'>จากคราวที่แล้วเราสร้างโปรเจ็ก WPF ด้วย Blend มาแล้ว   คราวนี้เราจะลองสร้างจาก Visual Studio ดูบ้าง&lt;br /&gt;      เริ่มแรก เราก็เปิด VisualStudio ขึ้นมา&lt;br /&gt;      เลือกเมนู File &gt; New &gt; Project&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_c0tjnzgh2F0/SNCgx9ioR3I/AAAAAAAAABA/1AjFiGKeUyM/s1600-h/d_vs_start1.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_c0tjnzgh2F0/SNCgx9ioR3I/AAAAAAAAABA/1AjFiGKeUyM/s320/d_vs_start1.JPG" alt="" id="BLOGGER_PHOTO_ID_5246870346080470898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;    เมื่อเลือกแล้วจะปรากฏดังนี้&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_c0tjnzgh2F0/SNChsozRd2I/AAAAAAAAABI/XzFGLr-7Mc0/s1600-h/d_vs_start2.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_c0tjnzgh2F0/SNChsozRd2I/AAAAAAAAABI/XzFGLr-7Mc0/s320/d_vs_start2.JPG" alt="" id="BLOGGER_PHOTO_ID_5246871354125416290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ให้เลือกภาษาที่ท่านต้องการ (เลือกได้เพียง 2 ภาษา คือ C# หรือ VisualBasic)&lt;br /&gt;แล้วเลือก Windows &gt; WPF Application&lt;br /&gt;ด้านบน ให้เลือกเวอร์ชันของ .NET Framework ที่จะใช้&lt;br /&gt;  เลือกได้ 2 เวอร์ชัน คือ 3 หรือ 3.5 (หากเลือกเวอร์ชัน 2  ท่านจะไม่เห็นโปรเจ็ก WPF)&lt;br /&gt;ตรง Name : ให้ใส่ชื่อโปรเจ็ก&lt;br /&gt;Location : ใส่ที่อยู่พาธของโปรเจ็ก&lt;br /&gt;Solution Name : ใส่ชื่อโซลูชั่น (มักจะชื่อเดียวกับ ชื่อโปรเจ็ก)&lt;br /&gt;&lt;br /&gt;แล้วจะปรากฏดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNCkOYlZEKI/AAAAAAAAABQ/BmFl_OBlk1Y/s1600-h/d_vs_start3.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNCkOYlZEKI/AAAAAAAAABQ/BmFl_OBlk1Y/s320/d_vs_start3.JPG" alt="" id="BLOGGER_PHOTO_ID_5246874132911034530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ตรงกลาง จะมี หน้าต่างคล้าย ArtBoard ของ Blend  แบ่งออกเป็นสองส่วน คือ&lt;br /&gt;      ส่วน Design&lt;br /&gt;      ส่วน XAML&lt;br /&gt;      เช่นเดียวกันกับ Blend&lt;br /&gt;ด้านข้างจะมี Tab ต่าง เช่น&lt;br /&gt;      Solution Explorer คล้ายกับ Project Panel ของ Blend&lt;br /&gt;      Property แบบเดียวกับ Blend&lt;br /&gt;      Resource แบบเดียวกับ Blend&lt;br /&gt;      ต่างกันที่มี Tab : ToolBox อยู่ตรงนี้ด้วย (ของ Blend แยกไปเป็น แถบต่างหาก)&lt;br /&gt;ด้านล่างจะมีหน้าต่าง Output&lt;br /&gt;     เอาไว้แสดงผลของการคอมไพล์โปรแกรม,Error และอื่น ๆ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-9219723710793444558?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/9219723710793444558/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=9219723710793444558' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/9219723710793444558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/9219723710793444558'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/09/wpf-visual-studio.html' title='สร้างโปรเจ็ก WPF ด้วย Visual Studio'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_c0tjnzgh2F0/SNCgx9ioR3I/AAAAAAAAABA/1AjFiGKeUyM/s72-c/d_vs_start1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-7122869824598261168</id><published>2008-09-16T22:19:00.000-07:00</published><updated>2008-09-16T23:50:50.841-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Expression'/><category scheme='http://www.blogger.com/atom/ns#' term='Blend'/><title type='text'>หน้าต่างของ Expression Blend</title><content type='html'>&lt;span style="font-weight: bold;"&gt;เรามาดูส่วนต่าง ๆ ของ Blend กัน&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNCYz3Oz3NI/AAAAAAAAAA4/BQ7F-jfsao8/s1600-h/d_parts1.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNCYz3Oz3NI/AAAAAAAAAA4/BQ7F-jfsao8/s400/d_parts1.JPG" alt="" id="BLOGGER_PHOTO_ID_5246861582653447378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;ArtBoard เป็นพื้นที่หลักที่เราจะเห็น ชิ้นงานทั้งหมด&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ToolBox เป็นแถบ ให้เราเลือกเครื่องมือ ที่จะนำมาใช้&lt;br /&gt;&lt;/li&gt;&lt;li&gt;View Tab สำหรับเปลี่ยนมุมมองของ artboard โดยเลือกได้ 3 อย่าง คือ Design(เห็นเป็นภาพ),XAML,Split(เห็นทั้งสองอย่างพร้อมกัน)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Project/Property/Resource Panel เลือกได้ 3 แท็บ&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ArtBoard Zoom ใช้เลือกขนาดการขยายภาพ(zoom)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Interaction Panel ใช้สำหรับการเลือก ออปเจ็ก, การอนิเมชั่น, การกำหนดเหตุการณ์&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-7122869824598261168?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/7122869824598261168/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=7122869824598261168' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/7122869824598261168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/7122869824598261168'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/09/expression-blend.html' title='หน้าต่างของ Expression Blend'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_c0tjnzgh2F0/SNCYz3Oz3NI/AAAAAAAAAA4/BQ7F-jfsao8/s72-c/d_parts1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-137235885423701687</id><published>2008-09-16T04:14:00.000-07:00</published><updated>2008-09-16T23:48:34.309-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Expression'/><category scheme='http://www.blogger.com/atom/ns#' term='Blend'/><title type='text'>การสร้างโปรเจ็ก WPF ด้วย Expression Blend</title><content type='html'>เมื่อติดตั้ง Express Blend และ Visual Studio 2008 เสร็จแล้ว  เรามาเริ่มสร้างโปรเจ็กกัน&lt;br /&gt;เราเลือกสร้างโปรเจ็กได้จากทั้งสองโปรแกรม เช่น เมื่อเปิด Blend มาครั้งแรกจะเห็นหน้าจอนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_c0tjnzgh2F0/SM-WhzZTHrI/AAAAAAAAAAM/iXL4GPN5ZHo/s1600-h/d_first_blend.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_c0tjnzgh2F0/SM-WhzZTHrI/AAAAAAAAAAM/iXL4GPN5ZHo/s320/d_first_blend.JPG" alt="" id="BLOGGER_PHOTO_ID_5246577598386085554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;เราก็เลือก New Project ได้ทันที เสร็จแล้วจะเห็นดังนี้&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_c0tjnzgh2F0/SM-XSrGYsfI/AAAAAAAAAAU/NN5GCUwtVxs/s1600-h/d_new_project.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_c0tjnzgh2F0/SM-XSrGYsfI/AAAAAAAAAAU/NN5GCUwtVxs/s320/d_new_project.JPG" alt="" id="BLOGGER_PHOTO_ID_5246578437972865522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;มีให้เลือก 3 อย่าง&lt;br /&gt;&lt;ol&gt;&lt;li&gt;WPF Application (.exe) คือ สร้างโปรแกรมที่ทำงานบนเครื่องคอมพิวเตอร์ (โดยไม่จำเป็นต้องต่อ Internet)&lt;/li&gt;&lt;li&gt;WPF Control Library คือ สร้างชิ้นส่วนคอนโทรล  เพื่อเอาไว้ใช้ในโปรเจ็กอื่นในภายหลัง&lt;/li&gt;&lt;li&gt;SilverLight คือ การสร้างโปรเจ็กที่สามารถรันบนเว็บได้&lt;/li&gt;&lt;/ol&gt;Location : คือ ไดเรกทอรีที่เราจะเก็บชิ้นงานไว้&lt;br /&gt;Language: มีให้เลือก 2 ภาษา คือ C# หรือ VisualBasic.NET&lt;br /&gt;Target: ให้เราระบุเลือกว่าจะใช้ .NET Framework เวอร์ชันใด&lt;br /&gt; กรณีที่เลือก .NET Framework 3.0  จะมีข้อดีตรงที่  โปรแกรมสามารถรันบนวินโดว์วิสต้าได้ทันที (โดยไม่ต้องติดตั้ง .NET 3.5)&lt;br /&gt;         (แต่ถ้าจะรันบน วินโดว์ XP ก็ยังคงต้องติดตั้ง  .NET 3)&lt;br /&gt; กรณีที่เลือก .NET Framework 3.5 จะมีข้อดีตรงที่  โปรแกรมสามารถใช้ฟีเจอร์ Linq ได้   แต่ต้องติดตั้ง .NET 3.5 ลงในเครื่องที่จะรันโปรแกรม&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNByC2bXsUI/AAAAAAAAAAg/kB-PJ83eznQ/s1600-h/d_new_2.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_c0tjnzgh2F0/SNByC2bXsUI/AAAAAAAAAAg/kB-PJ83eznQ/s320/d_new_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5246818959182246210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;แล้วกด OK  โปรแกรมก็จะสร้างโปรเจ็กขึ้นมา&lt;br /&gt;&lt;br /&gt;ให้ดูที่ด้านขวาบน  จะเห็นดังนี้&lt;br /&gt;ในหัวข้อ Project  จะมีไฟล์ต่างเกิดขึ้น คือ&lt;br /&gt;&lt;br /&gt;Solution :  คือ ไฟล์ที่เป็นไฟล์แม่ สำหรับเปิดโปรเจ็กขึ้นมา&lt;br /&gt;Project : คือ ไฟล์โปรเจ็ก (สังเกตุว่าจะมี Icon ที่บอกภาษา เช่น C#)&lt;br /&gt;App.xaml : คือ ไฟล์กลางสำหรับตั้งค่าต่าง ๆ ของโปรแกรม&lt;br /&gt;AssemblyInfo.cs :  คือ ไฟล์กลางสำหรับตั้งค่าเช่นเดียวกัน&lt;br /&gt;Window1.xaml : คือ ไฟล์ xaml ที่เราจะใช้เป็นประจำ มีไว้สำหรับกำหนด UI ของโปรแกรม  ใช้คู่กับไฟล์ Window1.xaml.cs(c#) หรือ Window1.xaml.vb (VisualBasic) ให้กดปุ่มลูกศร &gt;  แล้วจะเห็นไฟล์นี้&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-137235885423701687?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/137235885423701687/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=137235885423701687' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/137235885423701687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/137235885423701687'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/09/wpf_16.html' title='การสร้างโปรเจ็ก WPF ด้วย Expression Blend'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_c0tjnzgh2F0/SM-WhzZTHrI/AAAAAAAAAAM/iXL4GPN5ZHo/s72-c/d_first_blend.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7816424259476523004.post-7488236273413469896</id><published>2008-09-15T23:50:00.000-07:00</published><updated>2008-09-22T21:13:57.845-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Introduction'/><title type='text'>เริ่มต้น WPF</title><content type='html'>ขอเกริ่นเล็กน้อย WPF&lt;br /&gt;ย่อมาจาก Window Presentation Foundation เป็นระบบ User Interace(UI) แบบใหม่  ที่ทำให้โปรแกรมเมอร์กับกราฟิกดีไซเนอร์  ทำงานร่วมกันเพื่อสร้างโปรแกรมที่สวยงามขึ้น ใช้ง่ายขึ้น และ Interactive กับผู้ใช้มากขึ้น&lt;br /&gt;&lt;br /&gt;โดยเกิดภาษาใหม่ขึ้น  ชื่อว่า XAML เป็นภาษาที่ใช้อธิบายว่า UI เป็นอย่างไร เช่น&lt;br /&gt;&amp;lt;textblock&amp;gt;&lt;br /&gt;             Hello,World !&lt;br /&gt;&amp;lt;/textblock&amp;gt;&lt;br /&gt;โปรแกรมก็จะแสดง ช่องข้อความที่มีคำว่า Hello, World&lt;br /&gt;เป็นภาษาที่ใช้ XML เป็นพื้นฐาน  คือ&lt;br /&gt;&lt;ol&gt;&lt;li&gt;มี Tag  คือ ข้อความที่อยู่ในวงเล็บ &lt;&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;เมื่อมี Tag อะไรเกิดขึ้น   ก็จะมี Tag ปิด  คู่กันเสมอ โดยจะมีเครื่องหมาย / นำหน้าคำ&lt;/li&gt;&lt;li&gt;หากเป็น Tag ที่จบในตัวมันเอง (ไม่มี Tag ปิด)  ก็จะมีเครื่องหมาย / ต่อท้ายเช่น  &amp;lt;textblock text="Test" /&amp;gt;&lt;/li&gt;&lt;li&gt;ถือตัวอักษรใหญ่/เล็ก ว่าแตกต่างกัน (Case Sensitive)&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;เครื่องมือที่จะใช้สร้างงาน มี 2 โปรแกรม&lt;br /&gt;&lt;ol&gt;&lt;li&gt;MS Expression Blend   สำหรับให้ กราฟิกดีไซเนอร์  สร้างงานออกแบบที่เป็นกราฟิกแบบเวกเตอร์ (คล้ายกับ Illustrator) โดยจะได้เห็นเป็นภาพ  และโค้ดภาษา XAML  หามาใช้ได้ไม่ยากจาก &lt;a href="http://www.microsoft.com/expression/try-it/Default.aspx"&gt;ตรงนี้&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;MS Visual Studio 2008 Express สำหรับให้ โปรแกรมเมอร์ เขียนโปรแกรม(ภาษา C# หรือ VisualBasic) เชื่อมกับโค้ด XAML ที่ได้จาก Blend เพื่อออกมาเป็นโปรแกรมที่สมบูรณ์ หามาใช้ได้ไม่ยากจาก &lt;a href="http://www.microsoft.com/express/product/default.aspx"&gt;ตรงนี้ &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7816424259476523004-7488236273413469896?l=wpftutor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpftutor.blogspot.com/feeds/7488236273413469896/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7816424259476523004&amp;postID=7488236273413469896' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/7488236273413469896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7816424259476523004/posts/default/7488236273413469896'/><link rel='alternate' type='text/html' href='http://wpftutor.blogspot.com/2008/09/wpf.html' title='เริ่มต้น WPF'/><author><name>Jo</name><uri>http://www.blogger.com/profile/03400128710739454820</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
