Giáo trình giảng dạy Silverlight 2

Tài liệu Giáo trình giảng dạy Silverlight 2: GIÁO TRÌNH GIẢNG DẠY SILVERLIGHT 2 Nhóm tác giả thuộc công ty Infoway: Phạm Chí Cường Trần Duy Biên Trần Duy Long Website: www.infomap.vn Email: Contact@infoway.com.vn Infoway Solutions MỤC LỤC 2 MỤC LỤC: Chương I: Tổng quan về silverlight 1. Vì sao lại có silverlight? 2. Silverlight là gì 3. Các đặc tính của silverlight 3.1. Sự kết hợp của WPF và XAML 3.2. Mở rộng cho ngôn ngữ kịch bản 3.3. Sự tích hợp với các ứng dụng đã có 3.4. Sử dụng mô hình ngôn ngữ lập trình trên nền tảng .Net Framework và các công cụ để kết hợp 3.5. Hỗ trợ mạng 3.6. Hỗ trợ ngôn ngữ tích hợp truy vấn (LINQ) 4. Kiến trúc tổng thể và các mô hình lập trình của Silverlight 4.1 . Kiến trúc và các thành phần 4.2 . Các mô hình lập trình của silverlight 5. Khả năng hỗ trợ trình duyệt, hệ điều hành và các công nghệ liên quan 5.1. Hỗ trợ của hệ điều hành và trình duyệt 5.2. Các công nghệ và công cụ liên quan của silverlight 6. Hướng dẫn cài đặt và sử dụng công c...

pdf112 trang | Chia sẻ: Khủng Long | Lượt xem: 1268 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Giáo trình giảng dạy Silverlight 2, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
GIÁO TRÌNH GIẢNG DẠY SILVERLIGHT 2 Nhĩm tác giả thuộc cơng ty Infoway: Phạm Chí Cường Trần Duy Biên Trần Duy Long Website: www.infomap.vn Email: Contact@infoway.com.vn Infoway Solutions MỤC LỤC 2 MỤC LỤC: Chương I: Tổng quan về silverlight 1. Vì sao lại cĩ silverlight? 2. Silverlight là gì 3. Các đặc tính của silverlight 3.1. Sự kết hợp của WPF và XAML 3.2. Mở rộng cho ngơn ngữ kịch bản 3.3. Sự tích hợp với các ứng dụng đã cĩ 3.4. Sử dụng mơ hình ngơn ngữ lập trình trên nền tảng .Net Framework và các cơng cụ để kết hợp 3.5. Hỗ trợ mạng 3.6. Hỗ trợ ngơn ngữ tích hợp truy vấn (LINQ) 4. Kiến trúc tổng thể và các mơ hình lập trình của Silverlight 4.1 . Kiến trúc và các thành phần 4.2 . Các mơ hình lập trình của silverlight 5. Khả năng hỗ trợ trình duyệt, hệ điều hành và các cơng nghệ liên quan 5.1. Hỗ trợ của hệ điều hành và trình duyệt 5.2. Các cơng nghệ và cơng cụ liên quan của silverlight 6. Hướng dẫn cài đặt và sử dụng cơng cụ Silverlight 2 trên Visual studio 2008 6.1. Các bước cài đặt cơng cụ silverlight 2 7. Các ví dụ thực hành 7.1. Chương trình đầu tiên “Hello World” 8. Tài liệu tham khảo Chương II: XAML và Layout 1. Tổng quan về XAML 1.1. Xaml là gì? 1.2. Khai báo đối tượng 1.3. Thiết lập đặc tính cho đối tượng 1.4. Root elements và namespace trong XAML 1.5. Sự kiện 1.6. 2. Các namescope trong XAML 3. Sử dụng XAMLReader.Load 4. XAML và các Custom class 5. XAML và Type Converter 6. Layout 6.1. Canvas 6.2. StackPanel 6.3. Grid Infoway Solutions MỤC LỤC 3 Chương III: Sử dụng Silverlight trên Expression Blend và Visual Studio 2008 1. Giới thiệu về các cơng cụ phát triển Expression Blend 2 kết hợp với VS2008 1.1. Expression Blend làm việc như thế nào? 1.2. Những tính năng cĩ được từ Expression Blend 2. Bắt đầu nhanh với Silverlight 2 trên Expression Blend 2 2.1. Tạo một Project cho ứng dụng Silverlight 2 2.2. Vẽ khuơn hình (Shape) trên ứng dụng Silverlight 2.3. Thiết kế Control trên ứng dụng Silverlight 3. Xây dựng chương trình Silverlight 2 với Expression Blend và Visual Studio 2008Triển khai ứng dụng Chương IV: Các Control và User control trong Silverlight 1. Giới thiệu về các control phổ biến của Silverlight SDK tích hợp trong VS2008 2. Các Control Phổ biến trong Silverlight 2 3. User Control trong Visual Studio 2008 Chương V: Xử lý đồ họa trên Silverlight 1. Giới thiệu 2. Shapes and Drawing 2.1. Ellipse 2.2. Line 2.3. Path 2.4. Polygon 2.5. Polyline 2.6. Rectangle 3. Geometries 3.1. EllipseGeometry 3.2. PathGeometry 3.3. GeometryGroup 4. Brushes 3.1. Solid Color 3.2. Gradient 3.3. Images 3.4. Video 3.5. Deep Zoom Chương VI: Media và Animation 1. Animation 1.1. Storyboard 1.2. Key-Frame Animations Infoway Solutions MỤC LỤC 4 1.3. Double Animation 1.4. Color Animation 1.5. Point Animation 2. Media 2.1. MediaElement Object 2.2. Controlling Media Playback Interactively 2.3. Timeline Markers 2.4. Server-Side Playlist Ch ương VII: Làm việc với cơ sở dữ liệu trong Silverlight 1. Giới thiệu một vài cơng nghệ để truy cập dữ liệu trong Silverlight 2. Sử dụng Data Binding 3. Sử dụng Isolated Storage 4. Khái quát về làm việc với dữ liệu XML 5. Truy cập dữ liệu SQL Server với WCF Chương VIII: Giao tiếp mạng với silverlight 1. Giao tiếp HTTP và bảo mật trong Silverlight 1.1. Mặc định hỗ trợ giao thức HTTP 1.2. Kịch bản giao tiếp HTTP 1.3. Giao tiếp trong cùng một domain 1.4. Giao tiếp Cross-domain 1.5. Thiết lập triệu gọi HTTP 2. Các hạn chế trong truy cập mạng với silverlight 3. Truy cập web service trong silverlight 3.1. Bảo mật cho truy cập Service 3.2. Tạo một Service vượt qua phạm vi domain 4. Làm việc với socket 4.1. Hỗ trợ giao thức mạng 4.2. Lập trình mạng cơ bản với Socket 5. Mã hĩa dữ liệu của service Chương IX: Hiệu suất hoạt động trong ứng dụng Silverlight 1. Làm thế nào để chương trình của bạn chạy nhanh và ổn định 1.1. Thử nghiệm trên nhiều hệ điều hành và trình duyệt 1.2. Đặt EnableFrameRateCounter cho đúng trong thời gian phát triển 1.3. Sử dụng Transparent Background 1.4. Tránh việc sử dụng các kịch bản làm biến đổi kích cỡ font của Text 1.5. Tránh sử dụng chế độ Windowless 1.6. Sử dụng Visibility thay cho việc sử dụng Opacity trong rất nhiều trường hợp khơng cần đến sự cĩ mặt của Opacity 1.7. Silverlight sử dụng Multi-Core trong Rendering và Media Infoway Solutions MỤC LỤC 5 1.8. Trong chế độ Full-Screen, ẩn những đối tượng khơng sử dụng 1.9. Tránh sử dụng thuộc tính Width và Height đối với đối tượng MediaElement 1.10. Tránh sử dụng thuộc tính Width và Height đối với đối tượng Path 1.11. Nguy cơ đổ vỡ khi CPU sử ly cường độ lớn cơng việc 1.12. Nguy cơ đổ vỡ đối với ứng dụng cĩ những Package lớn 1.13. Sử dụng Double.ToString(CultureInfo.InvariantCulture) hiệu quả hơn Double.ToString() 1.14. 2. Sử dụng Background Worker 2.1. Bắt đầu với việc tạo một BackGroundWorker 2.2. Tạo một Event handler cho background worker bởi DoWork event 2.3. Tạo một event handler cho sự kiện ProgressChanged của backgroundworker 2.4. Tạo một sự kiện cho RunWorkerCompleted 2.5. Bổ xung sự kiện vào BackGroundWorker 2.6. Bắt đầu chạy background gọi bởi thủ tục RunWorkerAsync. 2.7. Hủy bỏ hoạt động của background gọi bởi thủ tục CancelAsync. Infoway Solutions CHƯƠNG I: TỔNG QUAN VỀ SILVERLIGHT CHƯƠNG I: TỔNG QUAN VỀ SILVERLIGHT 1 Vì sao lại cĩ Silverlight? Sự khĩ khăn của các doanh nghiệp khi xây dựng chiến lược Web Ngày nay khi phát triển các ứng dụng trên web các doanh nghiệp phần mềm thường đau đầu với những khĩ khăn về sự hỗ trợ trên trình duyệt và hệ điều hành. Điều họ muốn là với những ngơn ngữ và cơng cụ phát triển đã vốn quen thuộc từ trước đến giờ đều cĩ thể làm cho họ những ứng dụng chạy tốt trên mọi nền tảng, mọi trình duyệt. Silverlight ra đời như một cơng nghệ phù hợp cho phép họ làm được những việc như thế. Nếu bạn đã quen thuộc với cơng nghệ .Net Framework thì khi tiếp cận với Silverlight bạn sẽ tích kiện được rất nhiều thời gian và chi phí cho cơng nghệ web mới Nhu cầu cần thiết của thế giới đa phương tiện Các cơng nghệ plug-in trên web trước đây khơng cho phép bạn truyền tải những dữ liệu hình ảnh chất lượng cao như 720p HDTV, Trong khi chất lượng đường truyền mạng ngày nay đang ngày càng tốt hơn và nhu cầu được xem những video chất lượng cao cũng tăng lên thì sự ra đời của Silverlight đã đem đến cho người đam mê thế giới đa phương tiện một sự thỏa mãn thật sự. 2 Silverlight là gì? Silverlight là một dạng plug-in dựa trên cơng nghệ của Microsoft .Net, nĩ độc lập với đa nền tảng và đa trình duyệt, nĩ cho phép phát triển các ứng dụng đa phương tiện đặc biệt là các ứng dụng trên web. Silverlight cung cấp một mơ hình lập trình lập trình mềm dẻo và đồng nhất, nĩ hỗ trợ Ajax, Python, Ruby và các ngơn ngữ lập trình .Net như Visual basic, C#. Khả năng đa phương tiện của silverlight thể hiện ở mức độ truyền tải âm thanh và hình ảnh chất lượng cao một cách nhanh chĩng và hiệu quả trên tất cả các trình duyệt chính như Internet Explorer, Firefox, Safari. Infoway Solutions CHƯƠNG I: TỔNG QUAN VỀ SILVERLIGHT 2 Với việc sử dụng Expression Studio và Visual Studio, các nhà thiết kế và phát triển cĩ thể hợp tác một cách hiệu quả hơn bằng cách sử dụng chính kỹ năng của họ cĩ hiện nay để làm phát triển các sản phẩm web tương lai “Light up the web”. 3 Các đặc tính của Silverlight Silverlight kết hợp nhiều cơng nghệ vào một nền tảng phát triển, nĩ cho phép bạn được lựa chọn nhiều cơng cụ và ngơn ngữ lập trình thích hợp để giải quyết bài tốn của bạn. Silverlight cung cấp các tính năng sau: 3.1 Sự kết hợp của WPF và XAML. Silverlight là một gĩi nhỏ của cơng nghệ Windows Presentation Foundation (WPF). Nĩ được mở rộng nhiều hơn các Element trong trình duyệt để tạo giao diện người dùng. PWF cho phép bạn tạo ra đồ họa 3 chiều, hình ảnh động, đa phương tiện và nhiều tính năng phong phú khác trên máy khách. XAML (Extensible Application Markup Language) cung cấp các cú pháp đánh dấu đặc trưng cho việc tạo các Element. 3.2 Mở rộng cho ngơn ngữ kịch bản Silverlight cung cấp việc mở rộng cho các ngơn ngữ kịch bản (Javascript) ở một số các trình duyệt phổ biến để thể hiện việc trình bày giao diện và thao tác người dùng một cách phong phú hơn. 3.3 Sự tích hợp với các ứng dụng đã cĩ Silverlight tích hợp liền mạch với ngơn ngữ javascript và mã Ajax của ASP.Net để bổ sung các chức năng bạn đã xây dựng được. Bạn cĩ thể tạo những tài nguyên trên nền máy chủ cĩ trong ASP.NET và sử dụng các khả năng của Ajax trong ASP.NET để tương tác với tài nguyên trên nền máy chủ đĩ mà khơng làm gián đoạn người dùng. 3.4 Sử dụng mơ hình ngơn ngữ lập trình trên nền tảng .Net Framework và các cơng cụ để kết hợp. Bạn cĩ thể tạo các ứng dụng trên nền tảng Silverlight và sử dụng các ngơn ngữ động như InronPython cũng như là các ngơn ngữ C# và Visual Basic. Bạn cũng cĩ thể sử dụng các cơng cụ phát triển như Visual Studio để tạo ứng dụng trên nền tảng Silverlight 3.5 Hỗ trợ mạng Silverlight bao gồm các hỗ trợ cho HTTP qua TCP. Bạn cĩ thể kết nối tới các dịch vụ của WCF, SOAP, hoặc ASP.NET AJAX và nhận về các định dạng theo cấu trúc XML, JSON hay dữ liệu RSS. 3.6 Hỗ trợ ngơn ngữ tích hợp truy vấn (LINQ) Điều này cho phép bạn truy cập dữ liệu bằng cách sử dụng cú pháp trực quan tự nhiên và mạnh mẽ, được gõ bởi các đối tượng cĩ trong các ngơn ngữ .Net Framework. Infoway Solutions CHƯƠNG I: TỔNG QUAN VỀ SILVERLIGHT 3 4 Kiến trúc tổng thể và các mơ hình lập trình của Silverlight 4.1 Kiến trúc và các thành phần Về cơ bản Silverlight là một nền tảng thống nhất của nhiều thành phần khác nhau. Tuy nhiên chúng tơi nhĩm lại các thành phần chính của silverlight vào bảng dưới đây. Thành phần Diển tả Nền tảng trình bày cơ sở Các thành phần và dịch vụ hướng tới giao diện người dùng và tương tác người dùng, bao gồm các control cho dữ liệu cho người dùng nhập, thiết bị đa phương tiện, quản lý phân quyền số, trình bày dữ liệu, đồ họa vector, chữ, hình ảnh động. cũng bao gồm XAML để đặc tả việc bố trí giao diện .Net Framework cho silverlight Là một gĩi nhỏ trong .Net Framework, bao gồm các thành phần và cá thư viện, kể cả tương việc tương tác dữ liệu, khả năng mở rộng các control, mạng, garbage collection, và CLR Cài đặt và cập nhật Là thành phần để sử lý các tiến trình cài đặt làm sao để đơn giản hĩa cho lần cài đặt đầu tiên, tiếp sau đĩ chỉ cung cấp cơ chế tự động cập nhật và tương tác ở mức thấp. Dưới đây là hình ảnh mơ tả những thành phần trong kiến trúc của Silverlight cùng với các thành phần và dịch vụ liên quan khác. Core Presentation Components: Tính năng Mơ tả Dữ liệu vào (input) Xử lý dữ liệu đầu vào từ các thiết bị phần cứng như bàn phím, chuột, bảng vẽ Infoway Solutions CHƯƠNG I: TỔNG QUAN VỀ SILVERLIGHT 4 hoặc các thiết bị đầu vào khác Trình bày giao diện người dùng (UI Rendering) Trình bày vector và các đồ hoạ ảnh bitmap, ảnh động, và văn bản Thiết bị nghe nhìn (Media) Các tính năng phát và quản lý một vài thể loại file âm thanh và hình ảnh như .WMP và .MP3 Controls Hỗ trợ mở rộng cho các control để cĩ khả năng tùy chỉnh về kiểu dáng và khuơn mẫu Xếp đặt Layout Cho phép khả năng xếp đặt vị trí động các thành phần giao diện người dùng Trình bày dữ liệu (Data Binding) Cho phép việc kết nối dữ liệu của các đối tượng và các thành phần giao diện người dùng DRM Khả năng Quản lý phân quyền số XAML Cung cấp trình phân tách cho XAML Các lập trình viên cĩ thể tương tác với thành phần nền tảng trình bày cơ sở trên đây bằng cách sử dụng XAML để đặc tả. XAML là một yếu tố quan trọng nhất trong việc tương tác giữa .Net Framwork và các kiểu trình bày Layout, ngồi ra các lập trình viên cũng cĩ thể sử dụng cơ chế quản lý code bên trong để thao tác với lớp trình bày .Net Frame work for Silverlight: Tính năng Mơ tả Data Hỗ trợ ngơn ngữ truy vấn tích hợp (LINQ) và LINQ với đặc tả XML, dễ dang xử lý việc tích hợp và làm việc với dữ liệu từ nhiều nguồn khác nhau. Hỗ trợ việc sử dụng XML và các lớp biên đổi hĩa (serialization) để xử lý dữ liệu Base class library Thuộc thư viện của .Net Framework, nĩ cung cấp các chức năng lập trình chủ yếu như việc xử lý chuỗi, biểu thức chính quy, đầu vào và đầu ra, ánh xạ, tập hợp và tồn cục hĩa. Window Communication Foundation (WCF) Cung cấp các tính năng để đơn giản hĩa việc truy cập dữ liệu từ xa. Cơ chế này bao gồm một đối tượng trình duyệt, HTTP request và HTTP Response, RSS, JSON, POX, và các SOAP Common language runtime (CLR) Cung cấp việc quản lý bộ nhớ, dọn dẹp bộ nhớ thừa, xử lý ngoại lệ Windows Presentation Foundation controls (WPF) Cung cấp các control giầu tính năng như Button, Calendar, CheckBox, DataGrid, DatePicker, HyperlinkButton, ListBox, RadioButton, and ScrollViewer. Dynamic language runtime (DLR) Hỗ trợ việc biên dịch và thi hành với tính năng động của các ngơn ngữ kịch bản như Javascript và IronPython cho các chương trình trên nền tảng Silverlight. 4.2 Các mơ hình lập trình của silverlight Ở phiên bản Silverlight 1.0 cung cấp cho bạn duy nhất một mơ hình lập trình là Javascript API, cho đến phiên bản Silverlight 2.0 đã cung cấp cả hai mơ hình lập trình là Managed API và Javascript API. Trong khi Javascipt API chỉ cho phép bạn gõ mã lệnh Javascript để tương tác với trình duyệt thì Managed API đã sử dụng được cơ chế làm việc của Common Language Infoway Solutions CHƯƠNG I: TỔNG QUAN VỀ SILVERLIGHT 5 Runtime (CLR) và kể cả Dynamic Language Runtime (DLR) để biên dịch và thi chương trình code (C#, VB\) của bạn. 4.2.1 Javascript API Trong một chương trình silverlight nhúng theo kiểu Javascript API, nĩ tải chỉ một trang XAML đơn lẻ thay vì tải một gĩi ứng dụng. Trang XAML này cĩ thể bao gồm các tham chiều URI từ những nguồn bên máy chủ khác như là các đoạn video và hình ảnh. Silverlight nhúng sử dụng XAML để tạo một cây đối tượng cái mà bạn cĩ thể thao tác lập trình với javascript lưu trữ bên trong một trang HTML Javascript API khơng cung cấp một mơ hình ứng dụng cĩ khả năng hỗ trợ các ứng dụng tổ hợp với sự điều hướng bên trong. Tuy nhiên nĩ cho phép làm những kịch bản theo kiểu Splash screan. Bạn cũng cĩ thể làm các sự điều hướng trong Javascript API bằng cách tải lại trang XAML mới hoặc tải lại cả trang web đĩ trong trình duyệt. 4.2.2 Managed API Trong lập trình silverlight theo kiểu Managed API, bạn cĩ thể thao tác lập trình với cả file XAML và file code bên trong. Khi một Silverlight nhúng tải file XAML, nĩ sẽ tạo một cây mơ hình cái mà bạn cũng cĩ thể gõ bằng các mã lệnh bên trong ( thường là C#, Visual basic\). 5 Khả năng hỗ trợ trình duyệt, hệ điều hành và các cơng nghệ liên quan 5.1 Hỗ trợ của hệ điều hành và trình duyệt được mơ tả ở bảng dưới đây Operating system Internet Explorer 7 Internet Explorer 6 Firefox 1.5, 2.x, and 3.x Safari 2.x and 3.x Windows Vista cĩ — cĩ — Windows XP SP2 cĩ cĩ cĩ — Windows XP SP3 cĩ cĩ cĩ — Windows 2000 — cĩ — — Windows Server 2003 (excluding IA-64) cĩ cĩ cĩ — Mac OS 10.4.8+ (PowerPC) — — — — Mac OS 10.4.8+ (Intel-based) — — cĩ Cĩ 5.2 Các cơng nghệ và cơng cụ liên quan của silverlight. Microsoft Expression Blend: Sử dụng cơng cụ này bạn bạn cĩ thể tạo và thay đổi cách xắp xếp trình bày Layer của ứng dụng bằng cách thao tác đến canvas và control trong XAML, làm việc với các chức năng đồ họa, Lập trình với ngơn ngữ Javascript. Visual Studio 2008: Visual Studio cung cấp các cơng cụ hiệu quả cho việc phát triển các ứng dụng cĩ hỗ trợ thao tác code bên tron. Tất cả các phiên bản đã cĩ của Visual Studio đều cĩ khả năng hỗ trợ Silverlight,Tuy nhiên ở phiên bản mới này nĩ cịn hỗ trợ các tính năng đặc Infoway Solutions CHƯƠNG I: TỔNG QUAN VỀ SILVERLIGHT 6 biệt hơn như bao gồm khả năng IntelliSense, debugging và các template cho việc tạo mới một ứng dụng Silverlight. ASP.NET AJAX: Bao gồm tập các Control, Service, và các thư viện cần thiết cho việc tạo và tương tác với nền ứng dụng web Microsoft ASP.NET 3.5 Extensions Preview: Cơng nghệ này cung cấp chức năng thêm để việc tăng cường các ứng dụng ASP.NET AJAX. Nĩ bao gồm 2 control sử dụng hữu ích cho việc xây dựng ứng dụng nền tảng silverlight cũng như là một phần của ứng dụng ASP.NET: - ASP.NET MediaPlayer Server Control - ASP.NET Silverlight Server Control Internet servers: Bao gồm IIS (Microsoft Internet Information Services), và Apache Web server Microsoft Windows Communication Foundation (WCF) services. 6 Hướng dẫn cài đặt và sử dụng cơng cụ Silverlight 2 trên Visual studio 2008 6.1 Các bước cài đặt cơng cụ silverlight 2 - Tải file Silverlight_Tools.exe cĩ trên trang: 8EF6-D60C8EE221ED&displaylang=en - Bạn phải chắc chắn rằng máy tính của bạn đã cài đặt Visual Studio 2008 SP1 - Chạy file Silverlight_Tools.exe, chờ khoảng 1 phút để hiện thị Silverlight tools installation Winzard - Bấm next để đến bước 2, tích chọn “I have read an accept the license terms”. Infoway Solutions CHƯƠNG I: TỔNG QUAN VỀ SILVERLIGHT 7 - Bấm Next để hệ thống tự động kiểm tra tương thích( lưu ý: phải đĩng hết các trình duyệt web) - Để hệ thống cài đặt và hồn thành 7 Các ví dụ thực hành 7.1 Chương trình đầu tiên “Hello World” - Tạo mới một Project: chọn File -> New -> Proeject - Một cửa sổ mới “New Project” hiển ra. Chọn Visual C# (hoặc Visual basic) trong Project types, chọn Silverlight. Phía bên phải cửa sổ cho phép bạn chọn các Templale Infoway Solutions CHƯƠNG I: TỔNG QUAN VỀ SILVERLIGHT 8 - Chún ta chọn Silverlight Application trong Templates - Đặt tên chương trình đầu tiên là “HelloWorld”, tùy chọn Location, bấm OK - Bạn cĩ thể chọn Project Type theo mặc định trong hội thoại Add Silverlight application, bấm OK - Solution mới được tạo ra với 2 project: Silverlight project và web project( dùng để nhúng silverlight tạo bởi silverlight project) Trong thư mục ClientBin của web project (HelloWorld.Web) chứa ứng dụng silverlight được đĩng gĩi dưới dạng file HelloWorld.xap của project silverlight (HelloWorld) Infoway Solutions CHƯƠNG I: TỔNG QUAN VỀ SILVERLIGHT 9 Tồn bộ màn hình ứng dụng đầu tiên của bạn được nhìn thấy như sau - Chúng ta làm 2 phương pháp một là viết code C# trong code ứng dụng, hai là viết trực tiếp trong XAML 7.1.1 Viết chương trình bằng Code C# - Trong file Page.xaml.cs chúng ta bắt đầu với việc tạo một nút theo những dịng lệnh dưới đây // Khai bao button Button myButton; public Page() { InitializeComponent(); // Khởi tạo button myButton = new Button(); //Xác định các thuộc tính cho myButton myButton.Content = "Click Me"; myButton.Height = 25; myButton.Width = 100; myButton.Margin = new Thickness(10, 10, 0, 0); //ðưa myButton vào LayoutRoot LayoutRoot.Children.Add(myButton); - Để tạo sự kiện cho một nút chúng ta cần thêm những dịng lệnh sau vào //thêm phương thức xử lý sự kiện cho myButton myButton.Click += new RoutedEventHandler(myButton_Click); void myButton_Click(object sender, RoutedEventArgs e) { //Hiển thị thơng điệp trên trình duyệt System.Windows.Browser.HtmlPage.Window.Alert("Hello Silverlight World!"); } - Bấm F5 để chạy chương trình Infoway Solutions CHƯƠNG I: TỔNG QUAN VỀ SILVERLIGHT 10 7.1.2 Viết chương trình bằng XAML Lưu ý, với cùng project trên, muốn viết đặc tả bằng XAML tương đương ta cần xĩa bỏ phần mã trình C# cũ đi, vì C# và XAML khơng thể cùng sinh một đối tượng. Trong file Page.xaml ta thêm đoạn mã sau <UserControl x:Class="HelloWorld.Page" xmlns="" xmlns:x="" Width="400" Height="300"> - Gán sự kiện xử lý khi click - Bấm F5 để chạy ứng dụng. Cả hai phương thức viết trên đều cho ra một kết quả như hình vẽ sau 8 Tài liệu tham khảo - Silverlight Deverloper center: - Website chính của Silverlight: Infoway Solutions CHƯƠNG II: XAML CHƯƠNG II: XAML - Extensible Application Markup Language 1 Tổng quan về XAML 1.1 XAML là gì XAML được viết tắt bởi cụm từ: Extensible Application Markup Language là một ngơn ngữ dạng khai báo. Bạn cĩ thể tạo ra các phần tử đồ họa(UI) với những khai báo thơng qua thẻ trong XAML. Sau đĩ bạn cĩ thể dùng file mã lệnh tách biệt của nĩ(code-behind) để trả về những sự kiện và điều khiển những đối tượng mà bạn đã định nghĩa trong XAML. Nĩ là một ngơn ngữ mơ tả dựa trên XML là rất trực quan để xây dựng giao diện từ những bước phác thảo cho tới sản xuất sản phẩm, đặc biệt hữu ích cho đối tượng cĩ kinh nghiệm thiết kế website và kỹ thuật. 1.2 Khai báo đối tượng Cĩ hai cách để khai báo đối tượng trong XAML: 1.2.1 Khai bao trực tiếp: Sử dụng thẻ đĩng mở để khai báo một đối tượng giống như là một phần tử XML. Bạn cũng cĩ thể sử dụng cú pháp này để khai báo đối tượng gốc (root object) hoặc để xét các giá trị các thuộc tính. 1.2.2 Khai báo gián tiếp: Sử dụng giá trị trực tiếp để khai báo một đối tượng. Bạn cĩ thể sử dụng cú pháp này để thiết lập giá trị của thuộc tính.Thơng thường, điều này cĩ nghĩa là chỉ những thuộc tính mà được hỗ trợ bởi đối tượng mới cĩ thể sử dụng được phương pháp này. 1.3 Thiết lập đặc tính cho đối tượng Cĩ những cách sau để khai báo đặc tính cho đối tượng: 1.3.1 Sử dụng cú pháp theo thuộc tính Dưới đây là ví dụ xét giá trị cho các thuộc tính: Width, Height, Fill của đối tượng Rectangle: 1.3.2 Sử dụng cú pháp theo đặc tính của thành phần(element): Dưới đây là ví dụ xét đặc tính Fill theo cách này cho đối tượng Rectangle: Infoway Solutions CHƯƠNG II: XAML 2 1.3.3 Sử dụng cú pháp theo nội dung Dưới đây là ví dụ xét đặc tính Text cho đối tượng TextBlock(Giống như đối tượng Label trong Winform, Webform): Hello! 1.3.4 Sử dụng theo một tập hợp Đây là một trường hợp khá thú vị trong XAML, bởi cĩ những cách khác nhau để thể hiện tập hợp này. Hơn nữa nĩ cĩ thể xuất hiện ở phần đầu tiên của XAML cho phép bạn xét những đặc tính chỉ đọc (read-only) của đối tượng. Dưới đây là ví dụ xét đặc tính theo những cách khác nhau sử dụng theo kiểu tập hợp. Cách 1: Cách 2: <! —Khơng cần khai báo GradientStopCollection, bộ phân tích sẽ hiểu và tạo ra nĩ - -> Cách 3: Ngồi ra, cĩ những đặc tính mà chúng cĩ những tập hợp đặc tính nhưng chúng được xác định như là đặc tính nội dung của lớp. Trong trường hợp này ta xét đến đặc tính GradientStops được xử dụng ở trên. Bạn cĩ thể loại bỏ đặc tính này và sẽ cĩ kết quả như sau: 1.4 Root elements và namespace trong XAML Một file XAML chỉ được cĩ duy nhật một Root element và phải thỏa mãn cả hai tiêu chí sau: well- formed XML(cĩ mở và đĩng thẻ) và valid XML(tuân thủ theo Document Type Definition(DTD)). Ví dụ dưới đây cho Root element điển hình của XAML cho Silverlight với Root element là thành phần UserControl. <UserControl x:Class="MySilverlight.Page" xmlns="" xmlns:x="" > Infoway Solutions CHƯƠNG II: XAML 3 1.5 Sự kiện XAML là một ngơn ngữ khai báo cho đối tượng và những đặc tính của chúng, nhưng nĩ cũng bao gồm những cú pháp cho sự kết hợp sự kiện cho đối tượng trong những thẻ đánh dấu. Bạn chỉ rõ tên của sự kiện như là một thuộc tính tên trên đối tượng mà sự kiện được nghe. Về giá trị của thuộc tính, bạn chỉ rõ tên của hàm nghe sự kiện mà bạn định nghĩa ở phần code-behind hoặc ở phần javascript. Việc cĩ khai bao hay khơng đặc tính x:Class ở thẻ root trong XAML cĩ ảnh hưởng đến việc xử lý sự kiện. Nếu bạn khai báo x:Class tức là việc xử lý sự kiện của bạn sẽ được thực hiện trong code-behind, trường hợp này thường xuất hiện trong kiểu lập trình Managed API (chứa trong silverlight 2.0). Cịn ngược lại thì việc xử lý sự kiện của bạn được thực hiện ngay trong thẻ Javascript chứa trong HTML, trường hợp này thường xuất hiện trong kiểu lập trình JavaScript API (chứa trong Silverlight 1.0). - Ví dụ dưới đấy chỉ rõ cho bạn thấy cách tạo một sự kiện trong trường hợp kiểu lập trình Manged API <UserControl x:Class="Chapter2.Page" xmlns="" xmlns:x="" Width="400" Height="300"> Doạn mã trên, trong thẻ root chúng ta đã khai báo đặc tính x:Class=" Chapter2.Page", điều này cĩ nghĩa trong chương trình của chúng ta cĩ một file chứa class Chapter2.Page. Class này sẽ đảm nhiệm việc xử lý các sự kiện đã khai báo ở file XAML (Page.xaml). Trong thẻ chúng ta tạo thêm một nút và khai báo trong nút đĩ một sự kiện Click="Button_Click".Sự kiện này sẽ được xử lý ở trong code-behind như sau namespace Chapter2 { public partial class Page : UserControl { public Page() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { //Xu ly su kien Button click o day MessageBox.Show("Xin chao!"); } } } - Cịn ví dụ dưới đây sẽ chỉ rõ cho bạn thấy cách tạo một sự kiện trong trường hợp kiểu lập trình JavaScript API <UserControl xmlns="" xmlns:x="" Width="400" Height="300"> Infoway Solutions CHƯƠNG II: XAML 4 Doạn mã trên, trong thẻ root chúng ta khơng khai báo đặc tính x:Class. Việc xử lý sự kiện sẽ được thực hiện ngay trong trang HTML cĩ chứa chương trình silverlight này. function Button_Click() { alert("Xin chao!"); } 2 Các namescope trong XAML Trong Silverlight, một XAML namescope lưu trữ quan hệ giữa những tên từ khĩa của XAML đã được định nghĩa của đối tượng và những khởi tạo tương đương của nĩ. Điều này cũng tương tự như ý nghĩa của “namescope” trong các ngơn ngữ lập trình và cơng nghệ khác. XAML namescope được tạo ra trong quá trình dịch mã XAML và trong quá trình tạo hình đối tượng. Những tên mà được tạo trong namescope sau đĩ được sử dụng ở code-behind thao tác lúc chạy chương trình để truy cập tới đối tượng được tạo bởi quá trình dịch file XAML. Để biết thêm chi tiết các bạn cĩ thể tham khảo tại địa chỉ: 3 Sử dụng XAMLReader.Load Sử dụng JavaScript API cho Silverlight, để tạo đối tượng trong lúc thực thi ứng dụng bắt buộc phải sử dụng qua phương thức CreateFromXaml. Sử dụng manged API những class hoặc cấu trúc (structure) cho phép cĩ thêm các thành phần bên trong thực sự được khởi tạo nếu nĩ cĩ trong cây thành phần của Silverlight. Trong hầu hết các trường hợp mà bạn muốn khởi tạo đối tượng trong lúc thực thi, bạn cĩ thể đơn giản triệu gọi constructor của class liên quan tới nĩ. Tuy vậy, Bạn vẫn cĩ thể tạo đối tượng thơng qua đầu vào là XAML thơng qua managed API, qua việc sử dụng phương thức XamlReader.Load. Phương thức Load trong managed API là tương ứng với CreateFromXaml trong JavaScript API, cũng giống như CreateFromXaml, đầu vào cho phương thức Load là những chuỗi và đầu ra là những đối tượng mà cĩ thể thêm vào mạng đối dạng cây của Silverlight. XamlReader đơn giản được thiết kể để đọc xml “XmlReader” cĩ trong Silverlight cũng như trong các cơng nghệ khác của Microsoft . XamlReader là lớp được xây dựng theo kiểu static với những phương thức tạo đối tượng; nĩ tạo đối tượng song song với việc xử lý XAML để sinh ra trong lúc thực thi(run- time) những cây đối tượng từ XAML trong Silverlight Các bạn cần lưu ý những điểm sau khi sử dụng phương thức Load: - Nội dung chuỗi XAML phải định nghĩa một phần tử gốc (root element) - Nội dung chuỗi XAML phải là well-formed XML, và valid XML 4 XAML và các Custom class Infoway Solutions CHƯƠNG II: XAML 5 XAML hỗ trợ khả năng cĩ thể định nghĩa tùy chỉnh lớp(custom class) hoặc cấu trúc(structure) trong bất kỳ ngơn ngữ runtime nào (CLR), và sau đĩ truy cập vào class thơng qua thẻ đánh dấu của XAML(XAML markup), bao gồm cách sử dụng hỗn hợp của những thẻ Silverlight đã định nghĩa trong XAML và những thẻ XAML mà tham chiếu tới custom class tương ứng của nĩ (Mỗi custom class chứa tương ứng 2 file .cs và .xaml, ví dụ: myclass.xaml và myclass.xaml.cs) 4.1 Custom class trong ứng dụng hoặc Assemblies Custom class dùng trong XAML cĩ thể định nghĩa theo cách riêng biệt: - Trong code-behind được đĩng gĩi trong ứng dụng Silverlight - Như là một class được định nghĩa trong một assembly tách biệt, như là một thư viện thực thi hoặc DLL Mỗi cách trên đều cĩ những ưu và nhược điểm như sau: - Ưu điểm của việc tạo class và đĩng gĩi riêng biệt là khả năng cĩ thể chia sẻ và dùng được trong nhiều ứng dụng Silverlight khác. Đồng thời là khả năng quản lý phiên bản của control dễ dàng hơn và nĩ làm cho nĩ cĩ khả năng tạo ra class mà bạn dự dịnh sử dụng như là một root element trong trang XAML. - Ưu điểm của việc tạo custom class trong ứng dụng là về mặt kỹ thuật tương đối đơn giản và giảm thiểu kích cỡ và kiểm tra khi bạn gặp vấn đề trong dự án Silverlight dựa trên code-behind. Tuy nhiên cĩ điểm hạn chế là bạn khơng thể dùng custom class như là một root element. Bạn phải tham chiếu custom class của bạn qua một assembly khác hoặc là giới hạn subclass sử dụng User Control hỗ trợ code-behind trong dự án Silverlight của bạn. - Dù là định nghĩa trong cùng một assembly hay assembly khác nhau, custom class phải được ánh xạ qua CLR namespace và XML namespace để được tham chiếu trong XAML 4.2 Ràng buộc để Custom Class trở thành thành phần đối tượng trong XAML Để được tạo đối tượng như là một thành phần đối tượng của XAML, custom class của bạn phải đáp ứng các yếu tố sau đây: - Custom class phải để public và hỗ trợ khởi tạo mặc định khơng cĩ tham số truyền vào (default constructure ‘parameterless’). - Custom class khơng phải là class lồng(class lồng và dấu chấm ‘.’ ở cú pháp của nĩ ảnh hưởng tới những đặc điểm của Silverlight như là các property kèm theo. Ngồi ra để đối tượng của bạn như là một thành phần đối tượng của XAML, bạn cĩ thể cho phép sử dụng những property cho các public property của Custom class của bạn điều này làm cho Custom class của bạn như là một kiểu property. Điều này bởi vì bây giờ đối tượng cĩ thể được khởi tạo giống như một thành phần đối tượng và cĩ thể xét thuộc tính cho nĩ như là một property 4.3 Yêu cầu đối với sự kiện trong XAML đối với Custom class Để sử dụng cú pháp theo kiểu thuộc tính để tương tác với sự kiện trong XAML, sự kiện phải được public trong class mà hỗ trợ constructure mặc định, hoặc sự kiện phải được định nghĩa trong class trừu tượng và sau đĩ sự kiện cĩ thể truy cập được qua những class kế thừa. Infoway Solutions CHƯƠNG II: XAML 6 5 XAML và Type Converter 6 Layout Khi bạn xây dựng ứng dụng Silverlight, một trong những điều bạn cần làm đầu tiên đĩ là việc sẽ bố trí giao diện đồ họa của bạn như thế nào. Silverlight cung cấp cho bạn 3 kiểu bố trí khác nhau, đĩ là: Canvas, StackPanel và Grid. 6.1 Canvas Định nghĩa một khu vực mà trong đĩ bạn cĩ thể chỉ ra vị trí của từng đối tượng thành phần bằng cách sử dụng các tọa độ tham chiếu. Bạn cĩ thể sử dụng lồng các Canvas với nhau và những thành phần bên trong của Canvas phải là một UIElement. Trong nhiều trường hợp thì Canvas chỉ đĩng vai trị như một đối tượng để chứa đựng những đối tượng khác và khơng cĩ một thuộc tính hiển thị nào. Một Canvas sẽ khơng được hiển thị nếu nĩ cĩ một trong những thuộc tính sau đây: - Thuộc tính Height xét giá trị 0 - Thuộc tính Width xét giá trị 0 - Background bằng null hoặc là Nothing ở VS Basic - Opacity xét giá trị 0 - Visibility bằng Visibility.Collapsed - Một trong những Canvas ở mức độ cao hơn (parrent) của nĩ khơng được hiển thị. Ví dụ dưới đây chỉ ra là hình chữ nhật được cách trái 30pixel và cách trên 30pixel <Rectangle Canvas.Left="30" Canvas.Top="30" Fill="red" Width="200" Height="200" /> 6.2 StackPanel Sắp xếp những thành phần bên trong nĩ thành một dịng và cĩ thể hiển thị theo hai kiểu ngang hoặc là dọc. Giá trị mặc định được gán chọ thuộc tính Orientation là chiều dọc (Vertical) và giá mặc định được xét cho hai thuộc tính HorizontalAlignment và VerticalAlignment là Stretch Ví dụ dưới đây hướng dẫn cách tạo những những đối tượng trong StackPanel Infoway Solutions CHƯƠNG II: XAML 7 6.3 Grid Định nghĩa dạng lưới phức tạp bao gồm những dịng và cột. Mặc định Grid chứa một cột và một dịng. Để định nghĩa nhiều cột hoặc dịng chúng ta dùng ColumnDefinitions và RowDefinitions. Mỗi ColumnDefinition và RowDefinition trong ColumnDefinitions và RowDefinitions xác định một dịng hoặc cột. ColumnDefinition và RowDefinition cũng định nghĩa kích thước của mỗi cột và dịng sử dụng đối tượng GridLength Ví dụ: Dưới đây là ví dụ dùng Grid để lên một thiết kế giao diện cơ bản. <Grid x:Name="LayoutRoot" Background="#DCDCDC" Width="400" Height="300" ShowGridLines="True"> <TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="10" FontWeight="Bold" Text="Contoso Corporation" HorizontalAlignment="Center" VerticalAlignment="Center" /> <Grid x:Name="FormLayoutGrid" Grid.Row="1" Grid.Column="0" ShowGridLines="True"> <TextBlock Grid.Row="0" Grid.Column="0" Text="First Name" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" /> Infoway Solutions CHƯƠNG II: XAML 8 <TextBlock Grid.Row="1" Grid.Column="0" Text="Last Name" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" /> <TextBlock Grid.Row="2" Grid.Column="0" Text="Address" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" /> Thêm vào một vài đối tượng qua code-behind C# public Page() { InitializeComponent(); LayoutDesign(); } private void LayoutDesign() { //Tạo Stackpanel cho ListBox Control StackPanel DeptStackPanel = new StackPanel(); DeptStackPanel.Margin = new Thickness(10); LayoutRoot.Children.Add(DeptStackPanel); Grid.SetColumn(DeptStackPanel, 1); Grid.SetRow(DeptStackPanel, 1); TextBlock DeptListHeading = new TextBlock(); DeptListHeading.Text = "Department"; ListBox DeptList = new ListBox(); DeptList.Items.Add("Finance"); DeptList.Items.Add("Marketing"); DeptList.Items.Add("Human Resources"); DeptList.Items.Add("Payroll"); DeptStackPanel.Children.Add(DeptListHeading); DeptStackPanel.Children.Add(DeptList); //Tạo StackPanel cho các nút StackPanel ButtonsStackPanel = new StackPanel(); ButtonsStackPanel.Margin = new Thickness(10); ButtonsStackPanel.Orientation = Orientation.Horizontal; ButtonsStackPanel.HorizontalAlignment = HorizontalAlignment.Center; Infoway Solutions CHƯƠNG II: XAML 9 LayoutRoot.Children.Add(ButtonsStackPanel); Grid.SetColumn(ButtonsStackPanel, 0); Grid.SetRow(ButtonsStackPanel, 2); Grid.SetColumnSpan(ButtonsStackPanel, 2); Button BackButton = new Button(); BackButton.Content = "Back"; BackButton.Height = 30; BackButton.Width = 100; Button CancelButton = new Button(); CancelButton.Content = "Cancel"; CancelButton.Height = 30; CancelButton.Width = 100; Button NextButton = new Button(); NextButton.Content = "Next"; NextButton.Height = 30; NextButton.Width = 100; ButtonsStackPanel.Children.Add(BackButton); ButtonsStackPanel.Children.Add(CancelButton); ButtonsStackPanel.Children.Add(NextButton); BackButton.Margin = new Thickness(10); CancelButton.Margin = new Thickness(10); NextButton.Margin = new Thickness(10); } } Infoway Solutions CHƯƠNG II: XAML 10 Infoway Solutions CHƯƠNG III: SỬ DỤNG SILVERLIGHT TRÊN EXPRESSION BLEND VÀ VISUAL STUDIO 2008 CHƯƠNG III: SỬ DỤNG SILVERLIGHT TRÊN EXPRESSION BLEND VÀ VISUAL STUDIO 2008 1 Giới thiệu về các cơng cụ phát triển Expression Blend 2 kết hợp với VS2008 Expression Blen là một cơng cụ thiết kế chuyên nghiệp và đầy đủ tính năng để tạo các giao diện người dùng cho các ứng dụng trên nền tảng Microsoft Silverlight và Microsoft Window. Bằng việc tách rời mỗi tệp tin của dự án theo vai trị, Epxpression Blend cho phép nhà thiết kế chỉ cần tập trung vào việc sáng tạo cịn các lập trình viên thì tập trung vào cơng việc lập trình. Mỗi thành viên nhĩm cĩ thể làm việc mà khơng làm cản trở đến quá trình làm việc của người khác. Expression Blend cĩ thể làm ra các ứng dụng Windows Presentation Foundation(WPF), trang web Silverlight 1.0, User control cho Silverlight 2 (file .xap và các file hỗ trợ khác). Các thiết kế của bạn (visual design) được trình bày theo ngơn ngữ đánh dấu là XAML 1.1 Expression Blend làm việc như thế nào? Trong Expression Blen, Bạn cĩ thể thiết kế ứng dụng một cách trực quan, vẽ các hình, đường kẻ, và các Control cĩ trên Artboard, và sau đĩ bạn cĩ thể thay đổi sự xuất hiện và các hành động của chúng. Bạn cĩ thể nhập hình ảnd, video, và âm thanh. Cịn trong các ứng dụng trên nền tảng Window, bạn cịn cĩ thể nhập và thay đổi các đối tượng 3D. Bạn cĩ thể tạo các storyboard để làm chuyển động hình trong thiết kế của bạn, sau đĩ tùy trọn Trigger trong Storyboard khi người dụng cĩ tương tác với ứng dụng của bạn 1.2 Những tính năng cĩ được từ Expression Blend Expression Blend 2 bao gồm các tính năng sau: - Đầy đủ bộ các cơng cụ vẽ vector, nĩ bao gồm Text và các cơng cụ 3D - Dễ dàng sử dụng, giao diện trực quan hiện - Khả năng chuyển động thời gian thực - 3D and media support for enhancing user experiences - Hỗ trợ tăng cường cho người dùng nhiều kinh nghiệp với 3D và Media - Advanced, flexible, and reusable customization and skinning options for a variety of common controls - Nâng cao, linh động, tùy biến hĩa các tính năng sử dụng lại, các lựa chọn bề mặt cho một vào control phổ biến. - Tính năng tương tác mạnh mẽ với các nguồn dữ liệu và các tài nguyên bên ngồi - Tính năng thiết kế theo Real-time và markup views Infoway Solutions CHƯƠNG III: SỬ DỤNG SILVERLIGHT TRÊN EXPRESSION BLEND VÀ VISUAL STUDIO 2008 2 - Artwork import capabilities from Expression Design 2 - Khả năng nhập Artwork từ Expression Design 2 - Site import capabilities from Expression Encoder 2 - Khả năng nhập site từ Expression Encoder 2 - Tương tác với Visual Studio 2008 để giúp nhà thiết kế và lập trình viên làm việc chặt chẽ và hiệu quả với nhau 2 Bắt đầu nhanh với Silverlight 2 trên Expression Blend 2 2.1 Tạo một Project cho ứng dụng Silverlight 2 Bạn cĩ thể tạo một Project Silverlight 2 trong Microsoft Expression Blend 2 sau khi đã cài đặt Service Pack1 . với Expression Blend, một Project Silverlight sẽ xây dựng một ứng dụng Silverlight 2 với sự hỗ trợ các file bao gồm một trang HTML để kiểm tra cĩ tên là Default.html nĩ sẽ tải ứng dụng của bạn vào trình duyệt của window. Các bước tạo project cho silverlight 2 như sau 1. Trên thanh menu chọn File và chọn NewProject( CTRL+SHIFT+N) 2. Trong hộp hội thoại New Project , phí dưới chọn project type là Silverlight 2 Application 3. Đặt tên cho project của bạn, cái này sẽ trở thành tên thư mục và tên namespace của ứng dụng. Infoway Solutions CHƯƠNG III: SỬ DỤNG SILVERLIGHT TRÊN EXPRESSION BLEND VÀ VISUAL STUDIO 2008 3 4. Tiếp theo là chọn vị trí lưu trữ project trên ổ cứng của bạn bằng cách tìm trong nút “Browse”. 5. Trong mục Language, chọn ngơn ngữ là Visual C#, đĩ sẽ là ngơn ngữ để bạn viết trong file code-behind. 6. Chọn OK. Khi một project mới được tạo ra bạn cĩ thể bắt đầu ngay với các thao tác vẽ các khuơn hình và control trong trang chính(Page.xaml) Dưới đây là danh sách các file và các tham chiếu dll mà Expression Blend 2 tự tạo ra cho project mới của bạn 2.2. Vẽ khuơn hình (Shape) trên ứng dụng Silverlight 1. Trong hộp toolbox chọn một trong các cơng cụ shape sau: Hình chữ nhật hoặc hình Ellipse . 2. Trong khuơn vùng thiết kế, bạn cĩ thể kéo chiều rộng hoặc chiều dài hình chữ nhật này theo hướng di chuột. Infoway Solutions CHƯƠNG III: SỬ DỤNG SILVERLIGHT TRÊN EXPRESSION BLEND VÀ VISUAL STUDIO 2008 4 Mẹo: Nếu bạn giữ SHIFT khi kéo sẽ giữ được chiều rộng và chiều cao cùng kích thước. làm như vậy sẽ tạo ra một hình vuơng đối với hình chữ nhật, và hình trịn đối với hình ellipse Mẹo: Nếu bạn giữ ALT khi bạn vẽ mới một hình chữ nhật hoặc hình ellipse thì cơng cụ vẽ này sẽ tự động chọn điểm nhắp chuột ban đầu làm tâm để vẽ. 3. Lưu các thay đổi (CTRL+S) 2.3. Thiết kế Control trên ứng dụng Silverlight Các bước để thiết kế control 1. Trong hơpk Toolbox, chọn control là Textbox. 2. Trong khuơn vùng thiết kế, vẽ TextBox này bằng cách kéo thả chuột. đối tượng trả về sẽ là một TextBox mà bạn cĩ thể sửa nội dung chữ hiện thị trên TextBox đĩ ngay. Infoway Solutions CHƯƠNG III: SỬ DỤNG SILVERLIGHT TRÊN EXPRESSION BLEND VÀ VISUAL STUDIO 2008 5 • Bạn cĩ thể phĩng to, thu nhỏ, xoay, di chuyển và thực thi các sự kiện. 3. Lưu các thay đổi (CTRL+S). 3 Xây dựng chương trình Silverlight 2 với Expression Blend và Visual Studio 2008 Trong mục này chúng ta sẽ xây dựng một ứng dụng Silverlight 2 dùng để dự báo thời tiết tại cac vùng trên tồn thế giới. Chương trình ứng dụng này cĩ sự dụng kết hợp visual studio 2008 và Expression Blend Chúng ta sẽ xây dựng chương trình với kết quả là giao diện mơ tả dưới đây Trước tiên hãy xem qua cấu trúc ứng dụng trong Visual Studio 2008 sau khi đã tạo mới một Project Silverlight. Infoway Solutions CHƯƠNG III: SỬ DỤNG SILVERLIGHT TRÊN EXPRESSION BLEND VÀ VISUAL STUDIO 2008 6 Trong project WeatherWidget chúng ta cĩ một tham chiếu tới một Web service để triệu gọi dữ liệu dự báo thời tiết với liên kết Để kết nối tới một web service chúng ta cĩ thể xem thêm ở liên kết sau đây Bây giờ chúng ta sẽ sử dụng Expression Blend để thiết kế giao diện người dùng bằng cách chuột phải vào file Page.xaml chọn Open in Expression Blend Sau khi Expression Blend khởi động xong, các cấu trúc file và thư mục trên đĩ vẫn được sắp xếp và giữ nguyên giống như trong Visual Studio. Infoway Solutions CHƯƠNG III: SỬ DỤNG SILVERLIGHT TRÊN EXPRESSION BLEND VÀ VISUAL STUDIO 2008 7 Bây giờ chúng ta lần lượt tạo các Layout cho ứng dụng trên Expression Blend. Để thiết kế một lớp hình nền cho ứng dụng. Trên Toolbox, chuột phải chọn Canvas. Sau đĩ đặt tên cho Canvas này là LayoutRoot Với LayoutRoot ta chọn hình nền trong Resource đã được định nghĩa sẵn, chúng ta sẽ cĩ theo hình ảnh dưới đây Infoway Solutions CHƯƠNG III: SỬ DỤNG SILVERLIGHT TRÊN EXPRESSION BLEND VÀ VISUAL STUDIO 2008 8 Tiếp theo chúng ta lần lượt tạo thêm các Layout là các Canvas và StackPanel tương tự như với LayoutRoot để cĩ được các hình ảnh giao diện dưới đây Dưới đây là các đoạn mã Xaml tự sinh trong quá trình thiết kế với Expression Blend <Image x:Name="ConditionsOverlay" Margin="-13,-13,0,0" Source="{StaticResource SunBig}"/> <TextBlock Width="225" Height="37" TextAlignment="Right" FontSize="34" x:Name="TodayTemp" /> <TextBlock Width="225" Height="14" TextAlignment="Right" x:Name="TodayDescription" /> <TextBlock Width="225" Height="14" TextAlignment="Right" x:Name="TodayRange" /> <TextBlock Width="225" Height="14" TextAlignment="Right" x:Name="City" Text="ðang lấy dữ liệu..." /> <Canvas Width="71" Background="{StaticResource dividerVertical}" Margin="5, 0, 0, 0"> <TextBlock FontSize="11" x:Name="TomorrowName" Foreground="White" Opacity="0.5" /> Infoway Solutions CHƯƠNG III: SỬ DỤNG SILVERLIGHT TRÊN EXPRESSION BLEND VÀ VISUAL STUDIO 2008 9 <TextBlock Canvas.Top="35" x:Name="TomorrowLo" Foreground="White" Opacity="0.5" /> <Canvas Width="71" Background="{StaticResource dividerVertical}" Margin="5, 0, 0, 0"> <TextBlock FontSize="11" x:Name="DayAfterName" Foreground="White" Opacity="0.5" /> <TextBlock Canvas.Top="35" x:Name="DayAfterLo" Foreground="White" Opacity="0.5" /> <TextBlock FontSize="11" x:Name="TwoDaysAwayName" Foreground="White" Opacity="0.5" /> <TextBlock Canvas.Top="20" x:Name="TwoDaysAwayHi" Foreground="White" /> <TextBlock Canvas.Top="35" x:Name="TwoDaysAwayLo" Foreground="White" Opacity="0.5" /> <StackPanel Height="17" Background="{StaticResource dividerHorizontal}" Orientation="Horizontal" > <TextBlock Text="Làm tươi" Margin="5, 0, 5, 0" Width="105" Foreground="White" Opacity="0.5" MouseLeftButtonUp="TextBlock_MouseLeftButtonUp_Refresh" /> <TextBlock Text="Change ZIP" Margin="5, 0, 5, 0" Width="105" TextAlignment="Right" Foreground="White" Opacity="0.5" MouseLeftButtonUp="TextBlock_MouseLeftButtonUp_Zip" /> Để tạo sự kiện cho một Textblock trên Expression Blend. Sau khi chọn đúng đối tượng Texblock trên Objects and Timeline, nhắp đúp chuột vào vị trí tên sự kiện như hình vẽ dưới đây. Ngay lập tức Visual Studio sẽ mở ra cho chúng ta viết code behind. private void TextBlock_MouseLeftButtonUp_Zip(object sender, MouseButtonEventArgs e) { ZipCode.Text = ""; ZipCode.Foreground = new SolidColorBrush(Colors.Black); ConditionsScreen.Visibility = Visibility.Collapsed; ZipCodeScreen.Visibility = Visibility.Visible; } Bằng việc sự dụng kết hợp giữa Visual studio và Expression Blend, các sự cập nhật về mã lệnh cũng như các file trong ứng dụng luơn được thơng báo để 2 chương trình cùng cĩ được cập nhật mới nhất. Sau khi thiết kế đầy đủ các layout trên Expression Blend, việc cịn lại chủ yêu là dành cho người lập trình mã lệnh trên Visual Studio. Visual studio sẽ đĩng gĩi ứng dụng này thành file .xap (ở đây là WeatherWidget.xap). file này sẽ được triển khai ở bất kỳ một trang html hay aspx với dịng lệnh dưới đây. Infoway Solutions CHƯƠNG III: SỬ DỤNG SILVERLIGHT TRÊN EXPRESSION BLEND VÀ VISUAL STUDIO 2008 10 Trên trang HTML : <object data="data:application/x-silverlight-2," type="application/x- silverlight-2" width="100%" height="100%"> <a href="" style="text-decoration: none;"> <img src="" alt="Get Microsoft Silverlight" style="border-style: none"/> Trên trang ASPX : <asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/ WeatherWidget.xap" MinimumVersion="2.0.31005.0" Width="100%" Height="100%" /> Trên Visual studio bấm F5 để chạy ứng dụng ta sẽ cĩ kết quả dưới đây : Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 1 Giới thiệu về các control phổ biến của Silverlight SDK tích hợp trong VS2008 Các Control trong silverlight cho phép bạn lưu trữ nội dung hoặc các control khác, bạn cĩ thể tạo hoặc tự thiết kế được các control này để chúng hiển thị được những thay đổi trạng thái tới người dùng. Trong cơng cụ phát triển Visual studio 2008 đã tích hợp các cơng cụ silverlight (Cài đặt Siverlight tool, đã hướng dẫn ở chương một) cĩ rất nhiều các control cĩ sẵn để bạn tạo, thay đổi hoặc xử lý các sự kiện theo chúng Dưới đây là hình ảnh danh sách các cơng cụ đã cĩ trong Silverlight tool Ở Chương II chúng ta đã tìm hiểu về các cách trình bày control theo Layout (Grid, StackPanel, Canvas). Trong chương này chúng ta sẽ xem và tìm hiểu các control phổ biến trong silverlight 2 và cách trình bày chúng theo Layout đã học. 2 Các control phổ biến trong Silverlight 2 1.1 Border o Mổ tả Border cung cấp một background , khu vực cho phép bạn nhúng vào đĩ một thành phần duy nhất nhằm tạo ra hiệu quả về đồ hoạ. o Ví dụ Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 2 Text Surrounded by a Border 1.2 Button o Mơ tả Button kiểm sốt các phản ứng của người dùng qua các thiết bị đầu vào, bao gồm các sự kiện, style o Ví dụ <Button Name="Button" Content="Click Me !" Background="Blue" Margin="20,60,200,200" MouseLeftButtonDown="Button_MouseLeftButtonDown"/> 1.3 Calendar o Mơ tả Calendar cho phép người sử dụng chọn ngày, tháng, năm. Ta cĩ thể sử dụng các style khác nhau thơng qua Mode o Ví dụ 1.4 CheckBox o Mơ tả Cho phép người dùng lựa chọn ba trạng thái dánh dấu ,bỏ dánh dấu và trạng thái trung gian o Ví dụ <CheckBox Name="CheckBox1" ClickMode="Release" IsThreeState="False" Content="CheckBox two states" Margin="10,50,0,0"> Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 3 <CheckBox Name="CheckBox2" ClickMode="Release" IsThreeState="True" Content="CheckBox three states" Margin="10,100,0,0"> 1.5 ComboBox o Mơ tả ComboBox cho phép chọn lựa một Item từ một danh sách Item từ ComboBox o Ví dụ <ComboBox Name="ComboBox1" BorderThickness="2" IsDropDownOpen="True" SelectedIndex="0" Width="200" Height="30"> 1.6 ContentControl o Mơ tả ContentControl cĩ các dẫn xuất như Button, Panel. Ta cĩ thể tuỳ chỉnh ContentControl thơng qua các template o Ví dụ Sau đây là việc cài đặt một vài control được thừa kế từ ContentControl Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 4 \ 1.7 DatePicker o Mơ tả DatePicker cho phép người dùng sử dụng để lựa chọn ngày, hoặc gõ trực tiếp vào textbox hoặc sử dụng lịch thả xuống. DatePicker cung cấp một loạt các sự kiện hỗ trợ việc kiểm sốt lịch thả xuống. o Ví dụ <swc:Calendar x:Name="cal2" Canvas.Left="270" Canvas.Top="100" IsTodayHighlighted="false" /> <swc:DatePicker x:Name="dp2" Canvas.Left="20" Canvas.Top="480" SelectedDateFormat="Long"/> Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 5 1.8 GridSplitter o Mơ tả GridSplitter cho phép người dùng phân phối lại khơng gian giữa các hàng hoặc cột. Nĩ là yếu tố đồ hoạ tượng trưng cho một thành phần gắn vào nĩ mà thành phần đĩ cĩ thể tương tác o Ví dụ <swc:GridSplitter Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="4" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Top" ShowsPreview="True" /> <swc:GridSplitter Grid.Row="2" Grid.Column="1" Grid.RowSpan="2" Width="5" HorizontalAlignment="Left" VerticalAlignment="Stretch" /> Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 6 1.9 HyperlinkButton o Mơ tả HyperlinkButton hiển thị một siêu liên kết. Khi bấm vào HyperlinkButton sẽ cho phép người dùng truy cập vào một trang web, địa chỉ URI đích được xác định với các NavigateUri. Bạn cĩ thể chỉ định cửa sổ hoặc một khung trong những điểm đến trang web bằng cách sử dụng TargetName o Ví dụ <TextBlock Text="HyperlinkButton Demonstration" Margin="0,20,10,20" FontFamily="Verdana" FontSize="18" FontWeight="Bold" Foreground="#FF5C9AC9" /> <HyperlinkButton Content="Click here to learn about Silverlight" NavigateUri="" TargetName="_blank" Margin="10,60,0,0"/> 1.10 Image o Mơ tả Image hiển thị hình ảnh trong định dạng JPEG hoặc PNG. Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 7 Hình ảnh hiển thị ở 1, 4 hoặc 8 bit màu, hình ảnh thực với 24 hoặc 32 bit o Ví dụ Mã XAML: Mã C#: Image myImage = new Image(); myImage.Source = new BitmapImage(new Uri("myPicture.jpg", UriKind.RelativeOrAbsolute)); LayoutRoot.Children.Add(myImage); 1.11 InkPresenter o Mơ tả InkPresenter cung cấp các bản vẽ mặt để hỗ trợ tính năng Tablet PC. InkPresenter được dẫn xuất từ canvas nên cĩ thể hiển thị một hoặc nhiều đối tượng và UIElement strokes. o Ví dụ Mã XAML: <InkPresenter x:Name="MyIP" Height="500" Width="500" Margin="50,50,0,0" MouseLeftButtonDown="MyIP_MouseLeftButtonDown" LostMouseCapture="MyIP_LostMouseCapture" MouseMove="MyIP_MouseMove" Background="Transparent" Opacity="1" /> Mã C# private void MyIP_MouseLeftButtonDown(object sender, MouseEventArgs e) { MyIP.CaptureMouse(); StylusPointCollection MyStylusPointCollection = new StylusPointCollection(); MyStylusPointCollection.Add(e.StylusDevice.GetStylusPoints(MyIP)); NewStroke = new Stroke(MyStylusPointCollection); MyIP.Strokes.Add(NewStroke); } //StylusPoint objects are collected from the MouseEventArgs and added to MyStroke. private void MyIP_MouseMove(object sender, MouseEventArgs e) { if (NewStroke != null) NewStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(MyIP)); } //MyStroke is completed private void MyIP_LostMouseCapture(object sender, MouseEventArgs e) { NewStroke = null; } Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 8 1.12 ListBox o Mơ tả ListBox chứa một danh sách các Item, Item cĩ thể là một doạn văn bản hay một Control. o Ví dụ <TextBlock Text="ListBox Demonstration" Margin="0,20,10,20" FontFamily="Verdana" FontSize="18" FontWeight="Bold" Foreground="#FF5C9AC9" /> 1.13 MediaElement o Mơ tả Các MediaElement kiểm sốt nội dung Audio hoặc Video. Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 9 MediaElement cung cấp một vùng chữa nhật cĩ thể hiển thị Video trên đĩ, hoặc Audio o Ví dụ <MediaElement x:Name="media" Source="xbox.wmv" CurrentStateChanged="media_state_changed" Width="300" Height="300"/> 1.14 MultiScaleImage o Mơ tả MultiScaleImage cho phép người dùng mở một hình ảnh cho phép phĩng to thu nhỏ thơng qua cơng nghệ Deep Zoom. o Ví dụ Mã XAML: <MultiScaleImage x:Name="deepZoomObject" Source="source/items.bin" MouseEnter="DeepZoomObject_MouseEnter" /> Mã C#: private void DeepZoomObject_MouseEnter(object sender, MouseEventArgs e) { if (deepZoomObject.UseSprings = false) { deepZoomObject.UseSprings = true; } this.deepZoomObject.ZoomAboutLogicalPoint(3, .5, .5); } 1.15 PasswordBox o Mơ tả PasswordBox được sử dụng để nhập vào thơng tin mật khẩu ký tự hiển thị chỉ là ký tự đại diện. o Ví du Mã XAML: <PasswordBox x:Name="MyPWBox1" Margin="20,10,0,0" PasswordChanged="MyPWBox1_PasswordChanged" MaxLength="8" Height="35" Width="200" HorizontalAlignment="Left" /> Mã C#: public Page() { InitializeComponent(); } Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 10 private void MyPWBox1_PasswordChanged(object sender, RoutedEventArgs e) { ReadOnlyTB.Text = MyPWBox1.Password; } 1.16 Popup o Mơ tả Popup luơn luơn xuất hiện lên trên cùng cửa sổ ứng dụng hữu ích cho việc hiện thị thơng báo cho một nhiệm vụ o Ví dụ Mã XAML: <Button Width="100" Height="50" x:Name="showPopup" Click="showPopup_Click" Content="Show Popup" /> Mã C# // Create the popup object. Popup p = new Popup(); private void showPopup_Click(object sender, RoutedEventArgs e) { Border border = new Border(); border.BorderBrush = new SolidColorBrush(Colors.Black); border.BorderThickness = new Thickness(5.0); } 1.17 ProgressBar o Mơ tả ProgressBar hiển thị cho biết tiến trình đang hoạt động bằng việc thay đổi giá trị thay đổi. o Ví dụ Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 11 <TextBlock HorizontalAlignment="Center" Margin="10" Text="Value-Based Progress Bar" /> <ProgressBar x:Name="pg1" Value="100" Margin="10" Maximum="200" Height="15" IsIndeterminate="False" /> <TextBlock HorizontalAlignment="Center" Margin="10" Text="Indeterminate Progress Bar" /> <ProgressBar x:Name="pg2" Margin="10" Height="15" IsIndeterminate="True" /> 1.18 RadioButton o Mơ tả RadioButton cho phép người dùng chọn một tùy chọn từ một nhĩm các tùy chọn. Các RadioButton tổ chức trong cùng một nhĩm bằng cách đặt các GroupName chung cho mỗi RadioButton. Các RadioButton là một ContentControl o Ví dụ Mã XAML: <TextBlock Text="RadioButton Demonstration" Margin="0,20,10,20" FontFamily="Verdana" FontSize="18" FontWeight="Bold" Foreground="#FF5C9AC9" Grid.Row="0" Grid.ColumnSpan="2"/> <RadioButton x:Name="TopButton" Margin="5,0,0,0" Checked="HandleCheck" GroupName="First Group" Content="First Choice" Grid.Row="1" Grid.Column="1"/> <RadioButton x:Name="MiddleButton" Margin="5,0,0,0" Checked="HandleCheck" GroupName="First Group" Content="Second Choice" Grid.Row="3" Grid.Column="1"/> <RadioButton x:Name="LowerButton" Margin="5,0,0,0" Checked="HandleCheck" Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 12 Content="Third Choice" Grid.Row="4" Grid.Column="1"/> <TextBlock Grid.Row="5" x:Name="choiceTextBlock" Margin="0,10,0,0" Grid.ColumnSpan="2"/> Mã C#: private void HandleCheck(object sender, RoutedEventArgs e) { RadioButton rb = sender as RadioButton; choiceTextBlock.Text = "You chose: " + rb.GroupName + ": " + rb.Name; } 1.19 RepeatButton o Mơ tả RepeatButton là một nút kiểm sốt các sự kiện tác động vào nút như Mouse Click và thời gian giữa hai lần click liên tiếp o Ví dụ Mã XAML: RepeatButton Content="click and hold for multiple Click events" Click="RepeatButton_Click" Width="250" Margin="0,0,0,5" HorizontalAlignment="Left"/><TextBlock x:Name="clickTextBlock" Text="Number of Clicks:" /> Mã C#: static int Clicks = 0; private void RepeatButton_Click(object sender, RoutedEventArgs e) { Clicks += 1; clickTextBlock.Text = "Number of Clicks: " + Clicks; } Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 13 1.20 ScrollBar o Mơ tả ScrollBar cung cấp một thanh trượt cĩ khả năng di chuyển định hướng theo chiều ngang hoặc chiều dọc 1.21 ScrollViewer o Mơ tả ScrollViewer kiểm sốt một mảng content, cung cấp hai ScrollBar để kiểm sốt việc di chuyển mảng content . ScrollViewer cho phép bạn thiết lập kích cỡ của khoảng View liên quan đến Content theo chiều ngang và chiều dọc. o Ví dụ <ScrollViewer Height="200" Width="200" HorizontalScrollBarVisibility="Auto" Canvas.Top="60" Canvas.Left="340"> <TextBlock Width="300" TextWrapping="Wrap" Text="I am the very model of a modern Major-General,." /> 1.22 Slider o Mơ tả Slider cho phép người dùng lựa chọn từ một loạt các giá trị bằng cách di chuyển dọc theo một thanh ngang. o Ví dụ <Slider Margin="0,5,0,20" x:Name="slider1" Minimum="0" Maximum="10" /> Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 14 1.23 TabControl o Mơ tả TabControl cung cấp một giao diện hiển thị cho các thành phần. Các thành phần con của TabControl là các TabItem. o Ví dụ <UserControl xmlns:swc="clr- namespace:System.Windows.Controls;assembly=System.Windows.Controls" x:Class="TabControlExample.Page" xmlns="" xmlns:x="" FontFamily="Trebuchet MS" FontSize="11" Width="400" Height="300"> <swc:TabControl x:Name="tab1" Canvas.Top="20" Canvas.Left="20" Height="200" Width="300" /> <swc:TabControl x:Name="tab2" Canvas.Top="240" Canvas.Left="20" Height="200" Width="300" /> Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 15 1.24 TextBlock o Mơ tả TextBlock hiển thị nội dung văn bản. bạn cĩ thể gán các nội dung của một TextBlock bằng cách sử dụng nguồn text. Ngồi ra cũng cĩ thể gán TextBlock bằng một tập hợp các đối tượng text. o Ví dụ Hello, world! 1.25 TextBox o Mơ tả TextBox được sử dụng nhập dữ liệu dạng text từ người dùng hoặc hiển thị văn bản. TextBox thường được dùng để chỉnh sửa văn bản đơi khi cũng được dùng ở chế độ chỉ đọc. TextBox cĩ thể hiển thị nhiều dịng văn bản. o Ví dụ <TextBox x:Name="ReadWriteTB" TextChanged="ReadWriteTB_TextChanged" IsReadOnly="False" HorizontalAlignment="Left" Margin="20,5,0,0" Height="35" Width="200" /> 1.26 ToolTip o Mơ tả Tooltip cung cấp thơng tin về một đối tượng đồ họa bằng cách sử dụng một cửa sổ pupup. Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 16 o Ví dụ <TextBlock Text="TextBlock with an offset ToolTip." Canvas.Top="110" Canvas.Left="20" > <ToolTip Content="Offset ToolTip." HorizontalOffset="20" VerticalOffset="30"/> 1.27 DataGrid o Mơ tả DataGrid cung cấp một cách linh hoạt để hiển thị một tập hợp các dữ liệu trong các hàng và cột. Data Grid hỗ trợ nhiều style hiển thị dữ liệu trong các cột hoặc hàng. Data Grid hỗ trợ các bảng tùy chọn định dạng và khả năng hiển thị hoặc ẩn các tiêu đề, các thanh trượt di chuyển . Ngồi ra Data Grid cịn cung cấp một số kiểu mẫu mà bạn cĩ thể thay đổi hình thức thể hiện dữ liệu hàng, cột và tiêu đề. o Ví dụ <UserControl x:Class="DataGridSnippets.Page" xmlns="" xmlns:x="" xmlns:data="clr- namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" Width="500" Height="Auto"> <TextBlock Text="DataGrid Demonstration" Margin="0,20,10,20" FontFamily="Verdana" FontSize="18" FontWeight="Bold" Foreground="#FF5C9AC9" /> <data:DataGrid x:Name="dataGrid1" Height="140" Margin="0,5,0,10" AutoGenerateColumns="True" /> <data:DataGrid x:Name="dataGrid3" Height="140" Margin="0,5,0,10" RowDetailsVisibilityMode="VisibleWhenSelected" > Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 17 <data:DataGrid x:Name="dataGrid4" Height="160" Margin="0,5,0,10" RowHeight="40" AutoGenerateColumns="False" > <data:DataGridTextColumn Header="First Name" Width="SizeToHeader" Binding="{Binding FirstName}" FontSize="20" /> <data:DataGridTextColumn Header="Last Name" Width="SizeToCells" Binding="{Binding LastName}" FontSize="20" /> <data:DataGridTextColumn Header="Address" Width="150" Binding="{Binding Address}" > <data:DataGridCheckBoxColumn Header="New?" Width="40" Binding="{Binding IsNew}" /> <data:DataGridCheckBoxColumn Header="Subscribed?" Width="Auto" Binding="{Binding IsSubscribed}" IsThreeState="True" /> <TextBlock Text="DataGrid with template column and custom alternating row backgrounds:"/> <data:DataGrid x:Name="dataGrid5" Height="125" Margin="0,5,0,10" AutoGenerateColumns="False" RowBackground="Azure" AlternatingRowBackground="LightSteelBlue"> <TextBlock Padding="5,0,5,0" Text="{Binding FirstName}"/> Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 18 <TextBox Padding="5,0,5,0" Text="{Binding FirstName}"/> <data:DataGridTextColumn Header="Address" Width="300" Binding="{Binding Address}" /> Mã C#: using System; using System.Collections.Generic; using System.Windows.Controls; namespace DataGridSnippets { public partial class Page : UserControl { public Page() { InitializeComponent(); // Thiết lập ItemsSource để tự tạo các cột. dataGrid1.ItemsSource = Customer.GetSampleCustomerList(); dataGrid3.ItemsSource = Customer.GetSampleCustomerList(); dataGrid4.ItemsSource = Customer.GetSampleCustomerList(); dataGrid5.ItemsSource = Customer.GetSampleCustomerList(); } } public class Customer { public String FirstName { get; set; } public String LastName { get; set; } public String Address { get; set; } public Boolean IsNew { get; set; } public Boolean? IsSubscribed { get; set; } public Customer(String firstName, String lastName, String address, Boolean isNew, Boolean? isSubscribed) { this.FirstName = firstName; this.LastName = lastName; this.Address = address; this.IsNew = isNew; this.IsSubscribed = isSubscribed; } public static List GetSampleCustomerList() { Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 19 return new List(new Customer[4] { new Customer("A.", "Zero", "12 North Third Street, Apartment 45", false, true), new Customer("B.", "One", "34 West Fifth Street, Apartment 67", false, false), new Customer("C.", "Two", "56 East Seventh Street, Apartment 89", true, null), new Customer("D.", "Three", "78 South Ninth Street, Apartment 10", true, true) }); } } } 3 User Control trong Visual Studio 2008 Trong ví dụ được trình bày dưới đây chúng ta tìm hiểu cách tạo một User Control và sử dụng nĩ như thế nào trong Visual Studio 2008 1. Trong Project Silverlight đã cĩ chúng ta làm thao tác tạo New Item theo hình vẽ dưới đây Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 20 2. Chọn Silverlight User Control trong Templates và đặt tên control này là FormContactUserControl.xaml 3. Chúng ta sẽ cĩ 2 file sau được tạo ra - FormContactUserControl.xaml - FormContactUserControl.xaml.cs Trong FormContactUserControl.xaml chúng ta sẽ cĩ đoạn mã sau <UserControl x:Class="Chapter2.FromContactUserControl" xmlns="" Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 21 xmlns:x="" > 4. Bây giờ chúng ta sẽ thêm đoạn mã dưới đây vào bên trong thẻ <Button x:Name="btnSubmit" Content="Lưu lại" Margin="140,150,0,0" Width="55" 5. Thêm sự kiện vào nut bấm “btnSubmit’. Chúng ta sẽ xử lý sự kiện btnSubmit_Click vào trong mã c# như sau private void btnSubmit_Click(object sender, RoutedEventArgs e) { // Phe duyet du lieu dau vao if (txtName.Text == "") { MessageBox.Show("Họ và tên khơng được bỏ trống"); txtName.Focus(); } else { //Tiep tuc xu ly luu contact //... } } 6. Làm thao tác Build Sulution, chúng ta đã tạo xong control FormContactUserControl. Bây giờ chúng ta mở file Page.xaml để sử dụng lại control đĩ. Chúng ta thêm mới đoạn mã sau: xmlns:inf="clr-namespace:Chapter2" vào bên trong thẻ Infoway Solutions CHƯƠNG IV: CONTROL VÀ USER CONTROL TRONG SILVERLIGHT 22 7. Để hiển thị được User control: FormContactUserControl trong Page.xaml ta tiếp tục thêm đoạn mã sau 8. Bấm F5 để chạy chương trình bạn sẽ được kết quả như hình ảnh sau 4 Các bài tập thực hành Các ví dụ, và các bài thực hành mở rộng các bạn cĩ thể tải về từ địa chỉ sau. liên kết này là các ví dụ bao gồm của chương 2 và chương 3 Infoway Solutons XỬ LÝ ĐỒ HỌA TRÊN SILVERLIGHT CHƯƠNG V: XỬ LÝ ĐỒ HỌA TRÊN SILVERLIGHT 1 Giới thiệu Silverlight cung cấp nhiều lựa chọn cho việc thêm các tính năng trực quan thú vị cho ứng dụng của bạn. Bạn cĩ thể sử dụng vẽ, Shape, Path, và những hình học phức tạp. Những khu vực được xác định bởi dạng hình thì cĩ thể tơ hiệu ứng, như là ảnh, dải màu, hoặc là đoạn video, thơng qua việc sử dụng Brush. Silverlight kế thừa mợt thư viện đồ họa khá đầy đủ từ WPF bởi vậy sẽ khơng quá khĩ khăn để một lập trình viên đã quen với WPF chuyển qua làm việc với Silverlight. Dưới đây chúng ta sẽ lần lượt làm quen với các đối tượng đồ họa như Ellipse, Line, Path, Polygon, Geometries, BrushesQ 2 Shapes and Drawing Trong Silverlight, Shape là kiểu UIElement nên bạn cĩ thể dễ dàng hiển thị một đối tượng dạng Shape lên màn hình. Bởi vì chúng là những thành phần đồ họa nên những đối tượng Shape này cĩ thể đi kèm với những container như Grid và Canvas. Silverlight cung cấp những dạng hình(Shape) mà bạn cĩ thể dùng ngay được như Ellipse, Line, Path, Polygon, Polyline, và Rectangle. Những Shape đều cĩ chung những đặc tính dưới đây: - Stroke: dùng để vẽ viền ngồi của Shape. - StrokeThickness: độ dày của viền ngồi của Shape. - Fill: Mơ tả cách phía bên trong của Shape được vẽ. - Đặc tính Data chỉ rõ tọa độ và các đỉnh được định nghĩa tùy theo thơng tin đầu vào Những đối tượng Shape cĩ thể dùng bên trong Canvas. Canvas hỗ trợ chỉ ra vị trí tuyệt đối của đối tượng con bên trong thơng qua đặc tính đính kèm là Canvas.Left và Canvas.Top 2.1 Ellipse Bạn cĩ thể tạo một Ellipse bằng cách xác định hai thuộc tính cơ bản là rộng(Width) và cao(Height) như ví dụ minh họa dưới đây. <Ellipse Fill="Yellow" Height="100" Width="200" StrokeThickness="2" Stroke="Black"/> Infoway Solutons XỬ LÝ ĐỒ HỌA TRÊN SILVERLIGHT 2.2 Line Cho phép bạn vẽ một đoạn thẳng giữa hai điểm. Ví dụ dưới đây chỉ ra một số cách để bạn xác định tọa độ của đoạn thẳng và đặc tính Stroke của nĩ. <!—Vẽ một đường chéo từ tọa độ (0, 0) tới (100,100) và di chuyển nĩ tới gốc tọa độ mới thêm 100 pixels về phía bên phải. --> <RadialGradientBrush GradientOrigin="0.5,0.5" Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5"> 2.3 Path Lớp Path cho phép bạn vẽ những hình cong và những dạng hình phức tạp. Những hình cong và dạng hinh(shape) được diễn tả thơng qua việc sử dụng đối tượng Geometry. Để sử dụng Path, bạn tạo một Geometry và dùng nĩ để xét cho đặc tính Data của đối tượng Path. Cĩ nhiều loại đối tượng Geometry khác nhau để bạn chọn: LineGeometry, RectangleGeometry, và EllipseGeometry cĩ liên quan tới những dạng hình(shape) đơn giản lần lượt tương ứng Line, Rectangle, Ellipse. Để tạo những dạng hình phức tạp hoặc hình trịn chúng ta sử dụng PathGeometry. Ví dụ dưới đây xử dụng cú pháp rút gọn để biểu diễn một dạng hình phức tạp. <Path Stroke="DarkGoldenRod" StrokeThickness="3" Data="M 100,200 C 100,25 400,350 400,175 H 280" /> Infoway Solutons XỬ LÝ ĐỒ HỌA TRÊN SILVERLIGHT 2.4 Polygon Để xác định một đa giác(Polygon) bạn cần cung cấp một danh sách các điểm (Point) và tơ màu cho nĩ qua đặc tính Fill. Ví dụ dưới đây vẽ một đa giác với màu viền đỏ tía và bên trong được đổ màu xanh. <Polygon Points="300,200 400,125 400,275 300,200" Stroke="Purple" StrokeThickness="2"> 2.5 Polyline Cũng tương tự như đối tượng Polygon ngoại trừ việc khơng nhất thiết Polyline phải khép kín. Bạn cũng cĩ thể nhận được kết quả tương tự như Polyline khi vẻ chồng lên nhau nhiều Line. Chú ý Polyline với một điểm(Point) sẽ khơng được hiển thị lên. Ví dụ dưới đây vẽ một Polyline là một hình tam giác viền màu xanh khép kín. <Polyline Points="50,25 0,100 100,100 50,25" Stroke="Blue" StrokeThickness="10" Canvas.Left="75" Canvas.Top="50" /> 2.6 Rectangle Một hình chữ nhật(Rectangle) được xác định bởi hai đặc tính rộng(Width) và cao(Height), để xác định vị trí của Rectangle trong container chúng ta sử dụng thuộc tính Margin hoặc Canvas.Left, Canvas.Top để tùy chỉnh. Rectangle khơng hỗ trợ đối tượng con bên trong bởi vậy nếu bạn muốn khu vực Rectangle chứa những đối tượng Infoway Solutons XỬ LÝ ĐỒ HỌA TRÊN SILVERLIGHT khác bạn cĩ thể sử dụng Canvas. Bạn cũng cĩ thể dùng dạng hình hỗn hợp, nhưng trong trường hợp này cĩ lẽ bạn nên sử dụng RectangleGeometry hơn là việc dùng Rectangle. Ví dụ dưới đây hiển thị một Rectangle viền màu đỏ và tơ màu bên trong màu xanh. <Rectangle Width="100" Height="100" Fill="Blue" Stroke="Red" Canvas.Top="20" Canvas.Left="20" StrokeThickness="3" /> 3 Geometries Cung cấp lớp cơ sở cho những đối tượng để xác định dạng hình học cho đối tượng. Đối tượng Geometry cĩ thể sử dụng để làm vùng giao(clipping regions) và cũng như định nghĩa dữ liệu cho đối tượng Path. 3.1 EllipseGeometry Miêu tả hình dạng của đường trịn hoặc ellipse. FillRule là đặc tính kế thừa từ lớp cơ sở Geometry nhưng tùy chọn này khơng cĩ tác dụng đối với EllipseGeometry. EllipseGeometry chỉ đơn giản định nghĩa hình dạng cho ellipse và khơng thể tự nĩ hiển thị được. Bởi vì nĩ rất đơn giản và phạm vi sử dụng rộng. Ví dụ dưới đây vẽ một path sử dụng dữ liệu dạng EllipseGeometry 3.2 PathGeometry Miêu tả dạng hình phức tạp cĩ thể gồm cĩ hình cung, đường cong, ellipse, đoạn thẳng, và hình chữ nhật. Mỗi PathGeometry xác định bởi một danh sách đối tượng PathFigure. Mỗi đối tượng PathFigure bao gồm một hoặc nhiều PathSegment, tương tự cũng như với ArcSegment và LineSegment. Để phủ kín diện tích của PathGeometry thì mọi đối Infoway Solutons XỬ LÝ ĐỒ HỌA TRÊN SILVERLIGHT tượng PathFigure bạn phải xét thuộc tính IsFilled là "true" và FillRule để xác định khu vực được fill. 3.3 GeometryGroup Miêu tả một hỗn hợp hình dạng, được tạo thành từ nhiều đối tượng Geometry khác. Sử dụng FillRule cho GeometryGroup là rất hợp lý bởi sự kết hợp các hình dạng cĩ thể cĩ khả năng kết hợp các đoạn nơi mà sự áp dụng của quy luật fill cĩ tác dụng. 4 Brushes Bạn cĩ thể tơ màu các đối tượng trong Silverlight với màu đơn, dải nghiêng, bán kính nghiêng và ảnh. Infoway Solutons XỬ LÝ ĐỒ HỌA TRÊN SILVERLIGHT 4.1 Solid Color Một trong những thao tác chung trong bất cứ nền tảng nào là tơ màu một khu vực với một màu đơn sắc. Để thực hiện việc này, Silverlight cung cấp lớp SolidColorBrush. Dưới đây chúng tơi sẽ chỉ ra những cách khác nhau để tơ màu với SolidColorBrush. Để tơ màu một khu vực với màu đơn trong XAML, sử dụng theo những tùy chọn sau: o SolidColorBrush được định nghĩa trước theo tên. Ví dụ dưới đây dùng SolidColorBrush để xét thuộc tính Fill của hình chữ nhật(Rectangle). o Chọn từ bảng màu 32-bit với định dạng #rrggbb với rr, gg, bb lần lượt là 2 số mã 16 cho các màu đỏ, xanh lá, xanh lơ. Mở rộng thêm bạn cĩ thể xét với định dạng như sau: #aarrggbb với r, g, b ý nghĩa như trên và aa ở đây chỉ giá trị alpha hoặc là độ trong suốt. o Sử dụng thuộc tính kiểu phần tử để mơ tả SolidColorBrush( ở đây là thuộc tính Fill) 4.2 Gradient Gradient brush vẽ một khu vực với nhiều màu sắc pha trộn vào nhau dọc theo một trục. Bạn cĩ thể sử dụng chúng để tạo ra hiệu ứng ánh sáng và bĩng, mang lại cho thành phần đồ họa của bạn cảm giác 3 chiều. Bạn cũng cĩ thể sử dụng chúng để mơ phỏng kính, chrome, nước, và các bề mặt mịn. Silverlight cung cấp 2 loại gradient brush là : LinearGradientBrush và RadialGradientBrush. a. Linear Gradients LinearGradientBrush dùng để vẽ một khu vực với một dải nghiêng. Bạn chỉ ra màu sắc cho dải nghiêng và vị trí dọc theo trục nghiêng thơng qua việc sử dụng đối tượng GradientStop. Bạn cũng cĩ thể chỉnh sửa trục nghiêng, nĩ cho phép bạn tạo dải nghiêng theo chiều dọc hoặc ngang và đảo hướng của Infoway Solutons XỬ LÝ ĐỒ HỌA TRÊN SILVERLIGHT dài nghiêng. Ví dụ dưới đây sử dụng dải nghiêng với 4 màu và sử sụng nĩ để vẽ lên hình chữ nhật. b. Radial Gradients Giống như LinearGradientBrush, một RadialGradientBrush vẽ một khu vực với màu sắc mà pha trộn với nhau dọc theo một trục. Cách vẽ của RadialGradientBrush dựa theo một trục được xác định bởi đường trịn; màu sắc của nĩ tia ra ngồi từ phía gốc của nĩ. Ví dụ dưới đây vẽ một hình chữ nhật sử dụng RadialGradientBrush để tơ màu bên trong. <RadialGradientBrush GradientOrigin="0.5,0.5" Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5"> Infoway Solutons XỬ LÝ ĐỒ HỌA TRÊN SILVERLIGHT Dưới đây là một vài tùy chọn khác nhau giúp bạn tạo một số kiểu hiệu ứng khác nhau với RadialGradientBrush: 4.3 Images Lớp ImageBrush cho phép bạn sử dụng ảnh để fill, để xét làm bacrkground, và viền ngồi. ImageBrush sử dụng được với những định dạng ảnh JPEG hoặc PNG và được dùng thơng qua thuộc tính ImageSource. Bạn cĩ thể cung cấp thơng tin ImageSource với đường dẫn của ảnh để tải chúng. Infoway Solutons XỬ LÝ ĐỒ HỌA TRÊN SILVERLIGHT Mặc định ImageBrush sẽ giãn ảnh ra hết tồn bộ khu vực được vẽ, cĩ thẻ ảnh sẽ bị làm méo nếu khu vực được vẽ cĩ tỉ lệ bề mặt khác với ảnh. Bạn cĩ thể thay đổi trạng thái này bằng việc thay đổi thuộc tính Stretch mặc định của nĩ tới một trong những giá trị sau: None, Uniform, UniformToFill. Ví dụ dưới đây sử dụng ImageBrush để vẽ nền của một Canvas 4.4 Video VideoBrush cho phép bạn vẽ một khu vực bằng video. Ví dụ dưới đây sử dụng VideoBrush để vẽ màu chữ(Foreground) của TextBlock <MediaElement x:Name="butterflyMediaElement" Source="Butterfly.wmv" IsMuted="True" Opacity="0.0" IsHitTestVisible="False" /> <TextBlock Canvas.Left="5" Canvas.Top="30" FontFamily="Verdana" FontSize="120" FontWeight="Bold" TextWrapping="Wrap" Text="Video"> Infoway Solutons XỬ LÝ ĐỒ HỌA TRÊN SILVERLIGHT 4.5 Deep Zoom Deep Zoom cung cấp khả năng phĩng to thu nhỏ một cách tùy ý những ảnh lớn trong Siliverlight một cách hiệu quả nhất. Ảnh cĩ thể hiển thị ở mức rất nhỏ và rất lớn mà khơng ảnh hưởng tới hiệu quả hoạt động của ứng dụng đang hiển thị ảnh. Chỉ cĩ thuộc tính làm ảnh hưởng tới hiệu quả hoạt động đĩ là độ phân giải của màn hình. Để biết thêm chi tiết mời các bạn tham khảo địa chỉ sau: us/library/cc645050(VS.95).aspx Infoway Solutions CHƯƠNG VI: MEDIA VÀ ANIMATION CHƯƠNG VI: MEDIA VÀ ANIMATION 1 Animation Animation là một ảo giác được tạo ra bằng cách thay đổi một loạt các hình ảnh. Não nhận các hình ảnh như là một thay đổi cảnh. Trong phim ảo giác này được tạo bằng cách sử dụng các camera cĩ ghi lại rất nhiều hình ảnh, khi hình ảnh được phát trở lại bằng một máy chiếu, các khán giả thấy một hình ảnh chuyển động. Silverlight cĩ chứa rất nhiều các đối tượng cĩ thể thực hiện được việc tạo ra ảo giác chuyển động. 1.1 Storyboard Kiểm sốt các animation với một timeline và cung cấp các đối tượng và tài nguyên nhằm mục đích cung cấp thơng tin cho các animation con <PointAnimation Storyboard.TargetProperty="Center" Storyboard.TargetName="MyAnimatedEllipseGeometry" Duration="0:0:5" From="20,200" To="400,100" RepeatBehavior="Forever" /> <EllipseGeometry x:Name="MyAnimatedEllipseGeometry" Center="20,20" RadiusX="15" RadiusY="15" /> <Button Click="Animation_Begin" Width="65" Height="30" Margin="2" Content="Begin" /> <Button Click="Animation_Pause" Width="65" Height="30" Margin="2" Content="Pause" /> <Button Click="Animation_Resume" Width="65" Height="30" Margin="2" Content="Resume" /> Infoway Solutions CHƯƠNG VI: MEDIA VÀ ANIMATION <!-- Button that stops Animation. Stopping the animation returns the ellipse to its original location. --> <Button Click="Animation_Stop" Width="65" Height="30" Margin="2" Content="Stop" /> private void Animation_Begin(object sender, RoutedEventArgs e) { myStoryboard.Begin(); } private void Animation_Pause(object sender, RoutedEventArgs e) { myStoryboard.Pause(); } private void Animation_Resume(object sender, RoutedEventArgs e) { myStoryboard.Resume(); } private void Animation_Stop(object sender, RoutedEventArgs e) { myStoryboard.Stop(); } 1.2 Key-Frame Animations Key-frame animations cho phép bạn tương tác vào animation nhiều hơn hai đối tượng và kiểm sốt một animation bằng phương pháp nội suy. Key-frame ko cĩ các thuộc tính như From / To / bởi Animation. Bạn tạo ra key-frame, các đối tượng animation được key-frame kiểm sốt, khi các hình ảnh động chạy nĩ sẽ chuyển giữa các frame mà bạn xác định tạo ra một chuỗi chuyển động liền mạch <!-- Animate the TranslateTransform's X property from 0 to 350, then 50, then 200 over 10 seconds. --> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MyAnimatedTranslateTransform" Infoway Solutions CHƯƠNG VI: MEDIA VÀ ANIMATION Storyboard.TargetProperty="X" Duration="0:0:10"> <!-- Using a LinearDoubleKeyFrame, the rectangle moves steadily from its starting position to 500 over the first 3 seconds. --> <!-- Using a DiscreteDoubleKeyFrame, the rectangle suddenly appears at 400 after the fourth second of the animation. --> <!-- Using a SplineDoubleKeyFrame, the rectangle moves back to its starting point. The animation starts out slowly at first and then speeds up. This KeyFrame ends after the 6th second. --> <SplineDoubleKeyFrame KeySpline="0.6,0.0 0.9,0.00" Value="0" KeyTime="0:0:6" /> <Rectangle MouseLeftButtonDown="Mouse_Clicked" Fill="Blue" Width="50" Height="50"> <TranslateTransform x:Name="MyAnimatedTranslateTransform" X="0" Y="0" /> // When the user clicks the Rectangle, the animation // begins. private void Mouse_Clicked(object sender, MouseEventArgs e) { myStoryboard.Begin(); } ubleanimationusingkeyframes/ClientBin/TestPage.html 1.3 Double Animation Double Animation biến đổi giá trị giữa hai biến của đối tượng Animation bằng cách sử dụng nội suy tuyến tính trên một khoảng thời gian xác định <DoubleAnimation Infoway Solutions CHƯƠNG VI: MEDIA VÀ ANIMATION Storyboard.TargetName="MyAnimatedRectangle" Storyboard.TargetProperty="Opacity" From="1.0" To="0.0" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever" /> <Rectangle Loaded="Start_Animation" x:Name="MyAnimatedRectangle" Width="100" Height="100" Fill="Blue" /> private void Start_Animation(object sender, EventArgs e) { myStoryboard.Begin(); } ubleanimation/ClientBin/TestPage.html 1.4 Color Animation Color Animation biến đổi màu giữa hai biến của đối tượng Animation bằng cách sử dụng nội suy tuyến tính trên một khoảng thời gian xác định <StackPanel x:Name="myStackPanel" Background="Red" Loaded="Start_Animation"> <!-- Animate the background color of the canvas from red to green over 4 seconds. --> <ColorAnimation BeginTime="00:00:00" Storyboard.TargetName="myStackPanel" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" From="Red" To="Green" Duration="0:0:4" /> private void Start_Animation(object sender, EventArgs e) { colorStoryboard.Begin(); } TestPage.html 1.5 Point Animation Point Animation biến đổi giá trị toạ độ của một điểm giữa hai biến của đối tượng Animation bằng cách sử dụng nội suy tuyến tính trên một khoảng thời gian xác định Infoway Solutions CHƯƠNG VI: MEDIA VÀ ANIMATION <!-- Animate the center point of the ellipse from 100 X, 300 Y to 400 X, 100 Y over 5 seconds. --> <PointAnimation Storyboard.TargetProperty="Center" Storyboard.TargetName="MyAnimatedEllipseGeometry" Duration="0:0:5" From="100,300" To="400,100" RepeatBehavior="Forever" /> <EllipseGeometry x:Name="MyAnimatedEllipseGeometry" Center="200,100" RadiusX="15" RadiusY="15" /> // Start the animation when the object loads private void Start_Animation(object sender, EventArgs e) { myStoryboard.Begin(); } /TestPage.html 2 Media Các tính năng đa phương tiện của Silverlight và mơ tả cách tích hợp audio và video vào trang Silverlight 2.1 MediaElement Object Để them media(video, audio) vào trang web của bạn ta sử dụng MediaElement . MediaElement sẽ cung cấp cho bạn một Form để hiển thị media , bạn chỉ cần cung cấp các Infoway Solutions CHƯƠNG VI: MEDIA VÀ ANIMATION nguồn tài nguyên media cho URI, như là một file video chẳng hạn. Các MediaElement bắt đầu play khi trang web của bạn tải về. <MediaElement x:Name="media" Source="xbox.wmv" Width="300" Height="300" /> erview_snip/js/media_simple.html 2.2 Controlling Media Playback Interactively Bạn cĩ thể tương tác điều khiển media bằng cách sử dụng Play, Pause, Stop, và các thuộc tính của một đối tượng MediaElement. Ví dụ như định nghĩa một đối tượng MediaElement với một số nút điều khiển cho các file (video, audio) phát. <MediaElement x:Name="media" Source="xbox.wmv" Width="300" Height="300" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="3" /> <Button Click="StopMedia" Grid.Column="0" Grid.Row="1" Content="Stop" /> <Button Click="PauseMedia" Grid.Column="1" Grid.Row="1" Content="Pause" /> <Button Click="PlayMedia" Grid.Column="2" Grid.Row="1" Content="Play" /> private void StopMedia(object sender, RoutedEventArgs e) { media.Stop(); } private void PauseMedia(object sender, RoutedEventArgs e) { media.Pause(); } private void PlayMedia(object sender, RoutedEventArgs e) { media.Play(); Infoway Solutions CHƯƠNG VI: MEDIA VÀ ANIMATION } vw_controlling_media/ClientBin/TestPage.html 2.3 Timeline Markers Một timeline marker là siêu dữ liệu liên kết với một điểm trong một tập tin media. các đánh dấu thường được tạo trước và được lưu trữ trong các tập tin media riêng. chúng thường được sử dụng để đặt tên khác nhau trong một cảnh quay video, cho phép người sử dụng tìm đến một vị trí hoặc cung cấp các phân cảnh. Khi MediaElement đạt đến một thời gian đánh dấu trong quá trình phát, nĩ sẽ tăng MarkerReached, sự kiện này cĩ thể sử dụng để kích hoạt hành động khác. Một MediaElement của đối tượng Marker đều cho phép bạn truy cập vào tiêu đề (nhúng, đánh dấu lưu trữ trong tập tin media). Một tập tin cĩ thể chứa cả hai bao gồm tiêu đề nhúng tập lệnh và tập lệnh riêng biệt <TextBlock FontSize="12" Foreground="DarkGray">Time: <TextBlock FontSize="12" Foreground="DarkGray">Type: <TextBlock FontSize="12" Foreground="DarkGray">Value: <MediaElement MarkerReached="OnMarkerReached" HorizontalAlignment="Left" Source="thebutterflyandthebear.wmv" Width="300" Height="200" /> private void OnMarkerReached(object sender, TimelineMarkerRoutedEventArgs e) { timeTextBlock.Text = e.Marker.Time.Seconds.ToString(); typeTextBlock.Text = e.Marker.Type.ToString(); valueTextBlock.Text = e.Marker.Text.ToString(); } Infoway Solutions CHƯƠNG VI: MEDIA VÀ ANIMATION 2.4 Server-Side Playlist Một server-side playlist là một dãy các tài nguyên media cho phép quản trị viên trên máy chủ kiểm sốt các tài nguyên media của người sử dụng. một danh sách media phía máy chủ được sử dụng để phục vụ việc phát media, nĩ cĩ thể ko khơng cho phép download từ client. Silverlight sử dụng tập tin wsx để cấu hình xác định một server-side playlist(SSPL) cĩ thể được phục vụ cho client thơng qua các đối tượng MediaElement. Một số lợi ích của việc sử dụng (SSPL) như sau - Giảm băng thơng do giảm số lần phía client kết nối tới server để lấy nội dung. - Bạn cĩ thể tuỳ chọn danh sách media khi mà bạn đang phát một danh sách media từ trước. - Bạn cĩ thể kiểm sốt, bổ sung media. Ví dụ bạn cĩ thể chơi chỉ một phần của một tập tin media. Infoway Solutions CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT 1 Các cơng nghệ để truy cập dữ liệu trong Silverlight Trong các ứng dụng trên nền tảng Silverlight 2 cĩ cho phép truy cập dữ liệu theo nhiều cơng nghệ hay phương thức khác nhau. Cách đơn giản nhất để hiển thị và tương tác người dùng là Data Binding. Cách khác nữa để truy cập dữ liệu từ ứng dụng máy khách, như là một sự thay thế tối ưu của cookie, chúng ta cĩ thể sử dụng cơng nghệ Isolated Storage. Silverlight cũng cho phép đọc và ghi trên dữ liệu XML bằng cách sử dụng XmlReader hoặc LINQ to XML . Ngồi ra cách phổ biến trong các ứng dụng hiện nay thường làm đĩ là truy cập dữ liệu SQL Server thơng qua các cơng nghệ Web service, WCF và ADO.Net Data Service. Trong chương này chúng ta sẽ tìm hiểu một số cơng nghệ để truy cập dữ liệu sau: - Data Binding - Isolated Storage - Xử lý dữ liệu XML với LINQ to XML - Truy cập cơ sở dữ liệu SQL Server với Web Service(WCF) 2 Sử dụng Data Binding Data Binding cung cấp một cách đơn giảm cho ứng dụng nền tảng silverlight truy cập và tương tác tới dữ liệu. Thơng thường Data Binding quản lý dữ liệu theo luồng giữa người dùng và các đối tượng dữ liệu. Tức kà khi một binding được tạo và dữ liệu cĩ thay đổi, thì giao diện người dùng cũng được trình bày và thay đổi theo dữ liệu(tự động ánh xạ ). Tương tự khi người dùng thay đổi trên giao diện thì nĩ cũng cĩ thể làm thay đổi đối tượng dữ liệu. Ví dụ như khi người dùng thay đổi giá trị trên một TextBox, giá trị dữ liệu cũng tự động cập nhật theo thay đổi đĩ. o Sự liên kết giữa giao diện người dùng và dữ liệu - Binding Object: Như là một xúc tác ở giữaBindingTarget và Binding Source - Binding Source: Chứa các thuộc tính dữ liệu, cịn cĩ thể là đối tượng của CLR - Binding Target: Là các thuộc tính giao diệu người dùng để cĩ thể hiển thị hoặc thay đổi tới dữ liệu. Binding target cĩ thể là DependencyProperty của FramworkElement Infoway Solutions CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT 2 - Value Converter: Thành phần tùy chọn để áp dụng cho những trường hợp dữ liệu cần phân tích hoặc chuyển đổi - Điều hướng của luồng dữ liệu: Quyết định tới việc tương tác dữ liệu qua lại giữa Binding Source và Binding Target (xem chi tiết mục dưới) Ví dụ dưới đây sẽ chỉ rõ cách trình bày thuộc tính màu của chữ (ForeGround Color) của một TextBox: Mã XAML: <TextBox x:Name="MyTextBox" Text="Text" Foreground="{Binding Brush1, Mode=OneWay}"/> Mã C# : //Tạo một lớp MyColors đã thực thi giao tiếp INotifyPropertyChanged. MyColors textcolor = new MyColors(); // Brush1 thiết lập một SolidColorBrush với giá trị màu Red. textcolor.Brush1 = new SolidColorBrush(Colors.Red); // Thiết lập DataContext của MyTextBox. MyTextBox.DataContext = textcolor; Khi sử dụng DataContext trong mã C# trên đây, nĩ cho phép các thẻ UI thừa kế thơng tin về dữ liệu nguồn. Ví dụ giống như trong ASP.NET bạn sử dụng phương thước gán DataSouce để hiển thị dữ liệu trên một Grid. o Các phương thức điều hướng của luồng dữ liệu Mỗi một kiểu binding data đều cĩ một phương thức điều hướng luồng dữ liệu(Mode propery). Cái này quyểt định khi nào và làm thế nào để dữ liệu chảy tràn. Cĩ 3 phương thức điều hướng luồng dữ liệu sau - OneTime: binding dữ liệu tới target (giao diện người dùng) một lần và sau đĩ kết thúc kết nối khơng binding nữa. Phương thức này phù hợp khi hiển thị dữ liệu mà ít khi hoặc khơng bao giờ cần thay đổi. - OneWay: Binding dữ liệu tới target và giữ nĩ đến khi Source (nguồn dữ liệu) thay đổi thì target cũng thay đổi theo. Phương thức này phù hợp khi trình bày dữ liệu mà người dùng khơng được phép thay đổi - TwoWay: Binding dữ liệu tới target và giữ nĩ đến khi source thay đổi thì target cũng thay đổi theo, nhưng khi target thay đổi thì source cũng thay đổi theo. Phương thức này phù hợp khi trình bày dữ liệu mà cho phép người dùng thay đổi dữ liệu nguồn o Change Notification Để cho hợp lệ với các thay đổi giá trị giữa Source object và Target objects thì chúng ta phải thực thi một interface là InotifyPropertyChanged. Trong InotifyPropertyChanged cĩ cung cấp một event PropertyChanged. Trong ví dụ dưới đây. Class MyColors thực thi giao tiếp InotifyPropertyChanged cho phương thức OneWay namespace DataBinding { //Tao mot class thua ke interface INotifyPropertyChanged public class MyColors : INotifyPropertyChanged { private SolidColorBrush _Brush1; Infoway Solutions CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT 3 // Khai bao su kien PropertyChanged. public event PropertyChangedEventHandler PropertyChanged; //Tao thuoc tinh cua SolidColorBrush public SolidColorBrush Brush1 { get { return _Brush1; } set { _Brush1 = value; // Goi NotifyPropertyChanged khi thuoc tinh nguon duoc cap nhap NotifyPropertyChanged("Brush1"); } } public void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } } } 3 Sử dụng Isolated Storage Silverlight dùng Isolated Storage như một hệ thống file ảo để lưu trữ dữ liệu trong một thư mục ẩn trên máy tính của bạn. Nĩ chia dữ liệu vào làm 2 phân riêng biệt: Phần thứ nhất chứa các thơng tin quản lý như dung lượng cho phép và phần thứ 2 chứa dữ liệu thực sự. Mỗi ứng dụng Silverlight được phân bố một vùng riêng trong hệ thống lưu trữ này với dung lượng lưu trữ mặc nhiên là 1 MB. o Ưu điểm: - Isolated Storage là một thay thế tuyệt vời cho cookie, đặc biệt là nếu bạn đang làm việc với một tập lớn dữ liệu. Một số ví dụ về khả năng của Isolated Storage bao gồm undo lại một số thao tác của ứng dụng, hay giỏ hàng, các cài đặt về cửa sổ hay bất kỳ cài đặt nào mà bạn muốn truy cập vào lần nạp tiếp theo. - Isolated Storage lưu trữ theo người dùng cho phép các ứng dụng lưu giữ các cài đặt cho từng người dùng riêng biệt. o Một số vấn đề cĩ thể xảy ra: - Người quản trị cĩ thể đặt giới hạn đĩa trên mỗi người dùng và assembly, khơng cĩ bất kỳ cảnh báo nào về khơng gian trống cịn lại. Vì lý do này, bạn nên kiểm tra và bắt các ngoại lệ trong ứng dụng của bạn. - Dù rằng Isolated Storage được đặt trong một thư mục ẩn trong hệ thống, nhưng khơng cĩ nghĩa người dùng khơng thể tìm ra thư mục này, do vậy Isolated Storage khơng hồn tồn an tồn và người dùng cĩ thể thay đổi hoặc xĩa các file. Tuy nhiên, nếu muốn người dùng khơng thể thay đổi các file, bạn cĩ thể dùng các lớp mã hĩa để mã lại các file này trước khi lưu. - Các máy tính cĩ thể bị khĩa bởi các chính sách bảo mật và các ứng dụng sẽ khơng thể lưu được vào IsolatedStorage. Cụ thể hơn, bạn cần cĩ IsolatedStorageFilePermission để cĩ thể làm việc được với IsolatedStorage Infoway Solutions CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT 4 Giờ hãy xem qua ví dụ về việc lưu và đọc dữ liệu từ IsolatedStorage. Nhớ rằng bạn cần dùng using để tham chiếu đến namespace System.IO.IsolatedStorage cũng như là System.IO. Infoway Solutions CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT 5 using System.Windows.Controls; using System.IO.IsolatedStorage; using System.IO; using System; namespace Samples_Chap7 { public partial class Page : UserControl { public Page() { InitializeComponent(); //Luu du lieu vao file dulieu.txt SaveData("Day la du lieu cua toi", "dulieu.txt"); //Lay du lieu tu file dulieu.txt string test = LoadData("dulieu.txt"); } private void SaveData(string data, string fileName) { //Lay Isolated Storage cua nguoi dung danh cho ung dung using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName, FileMode.Create, isf)) { using (StreamWriter sw = new StreamWriter(isfs)) { //Luu du lieu sw.Write(data); sw.Close(); } } } } private string LoadData(string fileName) { string data = String.Empty; //Lay Isolated Storage cua nguoi dung danh cho ung dung using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName, FileMode.Open, isf)) { using (StreamReader sr = new StreamReader(isfs)) { string lineOfData = String.Empty; while ((lineOfData = sr.ReadLine()) != null) //Doc du lieu data += lineOfData; } } } return data; } } } Infoway Solutions CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT 6 4 Khái quát về làm việc với dữ liệu XML, LINQ to XML Trong Silverlight bạn cĩ thể phân tích dữ liệu XML bằng một trong hai cách là LINQ to XML hoặc XmlReader Đối với những tài liệu XML lớn địi hỏi việc tải dữ liệu về tốn nhiều bộ nhớ trong làm giảm hiệu suất chương trình. Trong trường hợp này chúng ta nên sử dụng XmlReader với những đặc tính như đọc dữ liệu nhanh, forward-only, non-caching parser. Ngược lại với những tài liệu XML nhỏ hơn bạn nên sử dụng LINQ to XML, nĩ cung cấp những tính năng và tiện ích hữu dụng hơn XmlReader Trong phần này chúng tơi sẽ hướng dẫn các bạn về cách xử lý dữ liệu xml với LINQ to XML( Silverlight). o Khái quát về LINQ to XML LINQ to XML cũng giống như Document Object Model(DOM) trong đĩ nĩ đem tài liệu XML này vào trong bộ nhớ. Bạn cĩ thể truy vấn và thay đổi tài liệu này, sau khi thay đổi nĩ bạn cĩ thể lưu nĩ và một file hoặc chuyển đổi hĩa nĩ (Serialize) rồi gửi nĩ thơng qua mạng Internet. Tuy nhiên LINQ to XML khác biệt so với DOM ở chỗ: Nĩ cung cấp một đối tượng mới nhẹ nhàng hơn và dễ dàng làm việc với chúng hơn, ngồi ra LINQ to XML cịn là sự cải tiến của ngơn ngữ Visual C# 2008. Một lợi thế quan trọng nhất của LINQ to XML là nĩ tích hợp với Language-Integrated Query (LINQ). Với sự tích hợp này nĩ cho phép bạn viết câu truy vấn tài liệu XML khi ở trong bộ nhớ để trả về tập hợp các Element và attribute. LINQ to XML cĩ thể so sánh được với các chức năng của XPath và Xquery. o Tạo một XAML động với LINQ to XML Trong mục này chúng ta sẽ chỉ rõ các tạo một control TextBlock bằng LINQ to XML. Trước tiên để tùy chỉnh project silverlight trong Visual Studio chúng ta chạy ví dụ dưới đây 1. Trong Solution Explorer, thêm assembly reference tới System.Xml.Linq.dll 2. Thay đổi nội dung file page.xaml của bạn theo mã dưới đây <UserControl x:Class="SilverlightApplication1.Page" xmlns="" xmlns:x="" Width="400" Height="300"> 3. Trong file page.xaml.cs thêm các khai báo using sau đây using System.Windows.Markup; using System.Xml.Resolvers; using System.Xml; using System.Xml.Linq; using System.IO; using System.Text; Dưới đây là ví dụ chi tiết về tạo một đối tượng XElement và lưu nĩ với thơng tin liên hệ. // Tao XElement de luu thong tin lien he ban be XElement contacts = new XElement("Contacts", new XElement("Contact1", new XElement("Ten", "Pham Chi Cuong"), new XElement("DienThoai", "0906 123 480"), new XElement("DiaChi", new XElement("DuongPho", "Nguyen Hong"), Infoway Solutions CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT 7 new XElement("ThanhPho", "HaNoi") ) ), new XElement("Contact2", new XElement("Ten", "Tran Duy Bien"), new XElement("DienThoai", "0904 252 161"), new XElement("DiaChi", new XElement("DuongPho", "Pham Van Dong"), new XElement("ThanhPho", "HaNoi") ) ) ); // Tao TextBlock1 // Luu y rang Element nay phai khai bao 2 XAML namespace XElement textBlock1 = XElement.Parse( @"<TextBlock xmlns=' xmlns:x=' TextWrapping= 'Wrap' Width = '400' Canvas.Top = '10' Text=''/>"); // Lay child Element cua contact1 XElement contact1 = contacts.Element("Contact1"); // Gan gia tri vao thuoc tinh Text o cuoi cung voi noi dung cua cac contact trong xml textBlock1.LastAttribute.SetValue(contact1.ToString()); // Lay child element thu hai XElement contact2 = contacts.Element("Contact2"); // Tao TextBlock2 // Luu y rang Element nay phai khai bao 2 XAML namespace XNamespace xmlns = ""; XElement textBlock2 = new XElement(xmlns + "TextBlock", new XAttribute(XNamespace.Xmlns + "x", ""), new XAttribute("Canvas.Top", 250), new XAttribute("Width", "600"), new XAttribute("Text", contact2.ToString()) ); // Them TextBlock1 vao trong trang LayoutRoot.Children.Add(XamlReader.Load(textBlock1.ToString()) as UIElement); // Them TextBlock2 vao trong trang LayoutRoot.Children.Add(XamlReader.Load(textBlock2.ToString()) as UIElement); o Cách load file XML từ một URI bất kỳ 1. Tạo một đối tượng WebClient, thêm trình xử lý (handler), Gọi phương thức OpenReadAsync. Làm theo mã lệnh dưới đây WebClient wc = new WebClient(); wc.OpenReadCompleted += wc_OpenReadCompleted; wc.OpenReadAsync(new Uri(uriString)); 2. Thực thi hàm callback wc_OpenReadCompleted Infoway Solutions CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT 8 private void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { //Kiem tra thuoc tinh Error cho cac loi if (e.Error != null) { OutputTextBlock.Text = e.Error.Message; return; } //Neu khong co loi, Lay du lieu stream ve va phan tich chung toi XDocument thong qua phuong thuc Load using (Stream s = e.Result) { XDocument doc = XDocument.Load(s); OutputTextBlock.Text = doc.ToString(SaveOptions.OmitDuplicateNamespaces); } } 5 Truy cập dữ liệu SQL Server với WCF Trong phần này chúng ta sẽ xây dựng một ứng dụng nhỏ để kết nối với CSDL SQL Server. Để hồn thiện được ứng dụng này chúng ta cần tập hợp được những kỹ năng sau - Kết nối tới một WCF Web Service - Sử dụng LINQ để truy vấn và trả về dữ liệu

Các file đính kèm theo tài liệu này:

  • pdftailieu.pdf