วันพุธที่ 29 ตุลาคม พ.ศ. 2551

ทำโปรเจ็ก Silverlight ตอนที่ 7 ใช้ Control Template เพื่อแต่งคอนโทรลให้สวยงามขึ้น

(แปลจาก blog ภาษาอังกฤษของ Scottgu ที่นี่)
หากต้องการตัวอย่าง SourceCode ฉบับเต็ม กดที่นี่

คุณสมบัติพิเศษของ Silverlight และ WPF คือ อนุญาติให้เราปรับแก้ หน้าตา ของคอนโทรล ได้อย่างสมบูรณ์
เรามาดูคอนโทรลแรกที่เราจะแก้กัน

ปุ่ม Button
ของเดิม

มีหน้าตา อย่างนี้

ท่านอาจจะแปลกใจว่า Content ของ Button นั้น ไม่จำเป็นต้องเป็นข้อความเสมอไป จริง ๆ เราอาจใส่ออปเจ็กอื่น ๆ ไว้ภายใน (ในแท็ก <Button.Content>) ได้ เช่น

ได้ผลดังนี้


เราอาจใช้คอนโทรลที่เป็นรูปร่าง(Shape) เช่น Ellipse(วงรี) เช่น


ได้ผลดังนี้


ถ้าเราจะเล่นพิเรนท์ ใส่ปฏิทินลงไปในปุ่ม ก็ยังได้ เช่น


การปรับหน้าตาของคอนโทรลด้วย ControlTemplate
ใน WPF และ Silverlight เราสามารถปรับหน้าตาของคอนโทรลได้โดยสิ้นเชิง โดยที่พฤติกรรมของคอนโทรลไม่เปลี่ยนแต่อย่างใด
ตัวอย่างเช่น ถ้าเราต้องการเปลี่ยนปุ่มให้เป็นรูปวงกลมเหมือนด้านล่าง ให้เราสร้าง Style ขึ้นมาอันนึง เก็บไว้ใน App.xaml แล้วใส่ <ControlTemplate> ไว้ข้างใน ภายในให้ใส่ หน้าตา ที่ต้องการไว้
ดังนี้


แล้วนำไปใช้กับ Button ดังนี้

จะได้ผล ดังนี้

แต่ สังเกตว่า ใน Button เรากำหนด Size และ Content ไว้ตายตัว("Push Me!)
แต่ ถ้าเราต้องการจะนำ Size ที่ผู้ใช้คอนโทรลด้านนอก กำหนดมา มาใช้
และใช้ Content ที่ผู้ใช้ด้านนอกกำหนดมา มาใช้

ให้เราใช้ {TemplateBinding}
และใช้ ContentPresenter แทน Content ของเรา ดังนี้

แล้วเรานำ ControlTemplate นี้ไปใช้ ดังนี้


แล้วได้ผลดังนี้

ทีนี้เราจะให้ เป็นปุ่มวงกลม แล้วนำไปใช้ใน Digg ดังนี้

แล้วได้ผลลัพท์สุดท้าย ดังนี้

ไม่มีความคิดเห็น: