Đồ án Tổng quan về silverlight

Tài liệu Đồ án Tổng quan về silverlight: Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 1 Nguyễn Anh Việt Lưu Xuân Việt Phần I: TỔNG QUAN VỂ SILVERLIGHT Chương 1: GIỚI THIỆU VỀ SILVERLIGHT I. KHÁI QUÁT SILVERLIGHT Microsoft Silverlight là một công nghệ đa nền, đa trình duyệt dựa trên nền .NET dùng để xây dựng và phát triển một thế hệ ứng dụng Web và thiết bị mới, đầy tính tương tác và hỗ trợ tối đa về media (phương tiện truyền thông). Hiện nay Silverlight đang có hai phiên bản là Silverlight 1.0 dùng phát triển ứng dụng bằng ngôn ngữ Javascript và một phiên bản Silverlight 2.0 bằng các ngôn ngữ .NET framework (khung) như C# hay VB.NET. Bên cạnh đó công nghệ Silverlight còn được hỗ trợ bởi ngôn ngữ đánh dấu XAML (extensible application markup language – Ngôn ngữ đánh dấu mở rộng) đầy sức mạnh trong việc thể hiện giao diện người dùng. Có thể nói công nghệ Silverlight đã thống nhất được tất cả các khả năng của server, Web và ứng dụng desktop, của code .NET, c...

pdf140 trang | Chia sẻ: hunglv | Lượt xem: 1551 | Lượt tải: 1download
Bạn đang xem trước 20 trang mẫu tài liệu Đồ án Tổng quan về silverlight, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 1 Nguyễn Anh Việt Lưu Xuân Việt Phần I: TỔNG QUAN VỂ SILVERLIGHT Chương 1: GIỚI THIỆU VỀ SILVERLIGHT I. KHÁI QUÁT SILVERLIGHT Microsoft Silverlight là một công nghệ đa nền, đa trình duyệt dựa trên nền .NET dùng để xây dựng và phát triển một thế hệ ứng dụng Web và thiết bị mới, đầy tính tương tác và hỗ trợ tối đa về media (phương tiện truyền thông). Hiện nay Silverlight đang có hai phiên bản là Silverlight 1.0 dùng phát triển ứng dụng bằng ngôn ngữ Javascript và một phiên bản Silverlight 2.0 bằng các ngôn ngữ .NET framework (khung) như C# hay VB.NET. Bên cạnh đó công nghệ Silverlight còn được hỗ trợ bởi ngôn ngữ đánh dấu XAML (extensible application markup language – Ngôn ngữ đánh dấu mở rộng) đầy sức mạnh trong việc thể hiện giao diện người dùng. Có thể nói công nghệ Silverlight đã thống nhất được tất cả các khả năng của server, Web và ứng dụng desktop, của code .NET, của ngôn ngữ hình thể và ngôn ngữ truyền thống và sức mạnh của Windows Presentation Foundation (WPF). Để cuối cùng tạo ra một ứng dụng mà người dùng phải thấy thích. Một số người cho rằng công nghệ Silverlight của Microsoft sẽ là “sát thủ” của Adobe Flash. Nhưng hiện tại thì chưa thể biết được điều gì, vì cả hai công nghệ này đều được sử dụng bằng plug in của trình duyệt, cả hai đều hỗ trợ đồ họa vector, âm thanh, phim ảnh, animation và ngôn ngữ script. Về mặt căn bản thì công nghệ này có sự khác biệt. Trong khi Flash sử dụng định dạng nhị phân semi-open, thì Silverlight dựa trên nền WPF. Thực tế trước khi công nghệ mới này của Microsoft được đặt tên là Silverlight thì nó đã có tên mã là WPF/e (Windows Presentation Foundation Everywhere). Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 2 Nguyễn Anh Việt Lưu Xuân Việt Điểm quan trọng nhất trong công nghệ Silverlight là hệ thống đồ họa con được hỗ trợ bởi một nhánh trong WPF, bao gồm các đoạn mã thể hiện âm thanh, phim ảnh. Được công bố tại Mix’07 vào tháng 5 năm 2007, SilverLight mang đến cho thế giới một cơn bão với một cái nhìn về Adobe Flash giống như ứng dụng Internet (RIAs) được xây dựng trên một nền cơ bản, mở ra cách tiếp cận với HTML và XAML sử dụng các công cụ như VisualStudio .NET và Microsoft Blend.Ý tưởng cho SilverLight thì không có gì mới, Microsoft đang nói về công nghệ gọi là WPF/e trước đây hơn 1 năm.Quan tâm đầy đủ thì đây là sự lẫn lộn xung quanh WPF/e có nghĩa là gì, tên cần thay đổi với cái gì đó hoàn toàn khác, một tên mà không liên quan tới WPF/e với khách hàng thông minh, thế hệ kế tiếp của nền Giao diện người dùng (UI) Nền tảng biểu diễn Windows( WPF). Ý tưởng của chữ e ở cuối WPF là chuyển WPF đi khắp mọi nơi. Nhưng đây đơn giản không phải là một trường hợp. WPF này là một phần nhân của .NET 3.0 và yêu cầu 30MB khi chạy. WPF/e có 2MB khi download, chạy trong bộ trình duyệt, và chạy trên nhiều nền tảng khác nhau.Và nhiều nền ở đây không có nghĩa là WindowsXP và WindowsVista; Nó có nghĩa là Windows và Apple Macintosh.Nó hoạt động trên bộ trình duyệt web safari trong Apple Macintosh được phục vụ từ một Máy chủ web Apache chạy trên Linux. Tên WPF/e không phải là đại diện đầy đủ cho việc đáng kinh ngạc của công nghệ mới này, vì vậy mà SilverLight đựơc công bố như tên mới tại Mix’07. Kiến trúc của Silverlight cũng khá phức tạp. Hệ thống đồ họa đảm bảo mọi thứ cho giao diện người dùng, như animation, text, âm thanh, hình ảnh. Plug-in được tích hợp vào trình duyệt để thể hiện ứng dụng Silverlight, để giao tiếp bằng JavaScript DOM và ứng dụng Silverlight có thể gọi các hàm trên server như một dạng web service. Dù người phát triển ứng dụng là người phát triển web hay người thiết kế đồ họa thì Silverlight đều tạo điều kiện tốt nhất để người đó có thể phát huy tối đa khả năng của mình. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 3 Nguyễn Anh Việt Lưu Xuân Việt 1. Silverlight (Ánh sáng bạc) là gì? SilverLight đơn giản là một nền Web được xây dựng để chạy RIAs. Một phần của nền web đó thực chất là một Plug-in mà chạy bên trong bộ trình duyệt. - Silverlight là một nền chéo, nền trình duyệt chéo của RIAs - Silverlight hỗ trợ phát lại Windows Media và các file âm thanh trên PC và MAC mà không phụ thuộc vào Windows Media Player - Sử dụng XAML, HTML, và JavaScript, nó hỗ trợ đồ họa, hoạt ảnh, đa phương tiện và mở rộng ra hơn những gì mà AJAX có thể hỗ trợ. - Gói lắp đặt nhỏ hơn 6MB. - XAML được tạo ra cho SilverLight có thể được sử dụng trong những ứng dụng WPF Microsoft Silverlight là một plug-in dựa trên .NET, độc lập với nền tảng và trình duyệt cho phép phát triển các ứng dụng đa phương tiện và nặng về tương tác trên Web. Silverlight cung cấp một mô hì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ữ trên nền .NET như Visual Basic và C#, và có thể tích hợp vào các ứng dụng Web sẵn có. Các khả năng về đa phương tiện của Silverlight bao gồm truyền tải dữ liệu hình ảnh, âm thanh chất lượng cao một cách nhanh chóng và hiệu quả về chi phí trên tất cả các trình duyệt chính như FireFox, Safari, và Internet Explorer chạy trên nền Mac hoặc Windows. Với Expression Studio và Visual Studio, nhà phát triển và nhà thiết kế có thể hợp tác một cách hiệu quả, dùng các kỹ năng hiện có để phát triển các sản phẩm Web tương lai. 2. Silverlight – Ứng dụng cơ bản với sự phong phú trong đồ họa và tương tác với người dùng (User). Người lập trình Web và thiết kế đồ họa có thể tạo ra nhiều ứng dụng Silverlight cơ bản với sự đa dạng trong cách thể hiện. Ta cũng có thể sử dụng Silverlight Markup để tạo ra Media và Graphics và vận dụng chúng với sự đa dạng của ngôn ngữ và quản lý Code. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 4 Nguyễn Anh Việt Lưu Xuân Việt Silverlight cũng cho phép bạn sử dụng những công cụ chất lượng chuyên nghiệp như Visual Studio cho coding và Microsoft Expression Blend cho thiết kế hình ảnh và giao diện. 3. Nét đặc trưng của Silverlight. Silverlight kết hợp nhiều kỹ thuật trong việc phát triển một nền tảng đơn mà cho phép ta chọn lựa những công cụ và ngôn ngữ lập trình thích hợp mà ta cần tới. Các tính năng của Silverlight: - WPF và XAML: Silverlight gồm có một tập kỹ thuật con WPF (Windows Presentation Foundation) gồm nhiều thành phần mở rộng trong trình duyệt dành cho UI. WPF cho phép ta tạo ra những hình ảnh, hoạt cảnh (amination), media và nhiều nét đặc trưng phong phú trên máy trạm (Client), phần mở rộng của trình duyệt cơ bản UI ngoại trừ những gì chỉ có hiệu lực với HTML. XAML (Extensible Application Markup Language) cung cấp một cú pháp khai báo “Markup” tạo ra các phần tử để xây dựng những ứng dụng Silverlight cơ bản như: text, controls, graphics, và animation. - Mở rộng với JavaScipt. Silverlight không những cung cấp những phần mở rộng của các ngôn ngữ kịch bản trong nhiều trình duyệt phổ biến mà còn cung cấp các “Control” bên trong trình duyệt UI, bao gồm cả khả năng làm việc với các phần tử WPF. - Hỗ trợ những nền tảng (platform), trình duyệt đa nhiệm. Silverlight chạy trên hầu hết các trình duyệt đa nhiệm (Bất kỳ nền tảng nào). Chúng ta có thể thiết kế và trình bày mà không phải lo lắng về vấn đề trình duyệt nào hoặc nền tảng nào (platform) và người sử dụng có hay không. - Tương thích với mọi ứng dụng hiện tại. Silverlight tương thích hoàn toàn với với mã JavaScript, ASP.NET AJAX hiện nay kể cả những hàm mở rộng ta đã khởi tạo. Ta có thể khởi tạo một tài nguyên cơ bàn trên máy chủ (Server) trong ASP.NET và Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 5 Nguyễn Anh Việt Lưu Xuân Việt sử dụng khả năng của AJAX trong ASP.NET để tương tác với tài nguyên đó mà không cần ngắt người dùng. - Truy xuất kiểu lập trình .NET Framework và những công cụ kết hợp. Ta có thể tạo một ứng dụng Silverlight cơ bản sử dụng các ngôn ngữ chức năng như: IronPython, hay ngôn ngữ gần gũi hơn như: C#, Visual Basic. Ta cũng có thể sử dụng những công cụ triển khai như Visual Studio để tạo những ứng dụng Silverlight cơ bản. - Mạng hỗ trợ. Silverlight được hỗ trợ HTTP qua giao thức TCP. Ta có thể kết nối những dịch vụ: WCF, SOAP, hoặc ASP.NET AJAX và thu nhận dữ liệu XML, JSON, hoặc RSS. 4. Chạy Silverlight cơ bản. - Ứng dụng Silverlight cơ bản chạy trên các trình duyệt. Những ứng dụng được tạo ra trong Silverlight chắc chắn sẽ chạy được trên các trình duyệt mà không cần phải thêm một đoạn mã (Code) mới nào. Để chạy được những ứng dụng Silverlight cơ bản này, người dùng (User) cần đến 1 trình nhúng (Plug-in) nhỏ vào trong trình duyệt. Plug-in này hoàn toàn miễn phí. Nếu người dùng chưa cài đặt Plug-in, chúng sẽ tự động nhắc người dùng cài đặt vào. Việc tải về và cài đặt chỉ trong vòng vài giây và phụ thuộc vào việc mong muốn hay loại bỏ việc cài đặt phía người dùng. 5. Tạo một ứng dụng Silverlight cơ bản. Chúng ta có thể tạo một ứng dụng Silverlight cơ bản sử dụng bất kỳ .NET Framework nào với sự hỗ trợ của ngôn ngữ (bao gồm Visual Basic, C#, và JavaScript). Visual Studio 2008 và Expression Blend cung cấp và hỗ trợ cho sự phát triển ứng dụng Silverlight. Chúng ta cũng có thể tạo một trang Web mà sử dụng cả hai phần tử WPF và HTML với Silverlight. Cũng giống như HTML, XAML cũng cho phép ta tạo ra những UI cho những nền ứng dụng Web với những cú pháp đã khai báo. Nhưng có sự khác biệt là XAML cung cấp nhiều phần tử mạnh mẽ hơn. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 6 Nguyễn Anh Việt Lưu Xuân Việt II. BẢN ĐỒ SILVERLIGHT Chủ đề này cung cấp một cái nhìn tổng thể về những nét đặc trưng chính trong việc phát triển ứng dụng cơ bản Silverlight. Nó bao gồm những bước phổ biến để tạo một ứng dụng cơ bản Silverlight với những đoạn code ví dụ giúp bạn trong những bước đầu viết code. Chủ đề này bao gồm những phần sau: • Prerequisites • Integrating Silverlight into Applications • XAML • Layout • Controls • Adding Code Logic • Dynamic Languages • Graphics • Media and Animation • Data • Networking • Related Topics 1. Yêu cầu cơ bản (Prerequisites) Bạn có thể chạy tất cả các ví dụ có trong chủ đề này mà không cần cài đặt thêm bất cứ cái gì ngoại trừ trình thực thi Silverlight 2. Bên cạnh đó, nếu bạn muốn thêm vào hay sửa đổi ví dụ, bạn sẽ cần phải thêm những công cụ Silverlight và làm việc với một đề án (project) Silverlight. Chủ đề này sử dụng ứng dụng API cho Silverlight. Bạn cũng cần phải trình bày ứng dụng nền Silverlight sử dụng JavaScript API cho Silverlight. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 7 Nguyễn Anh Việt Lưu Xuân Việt 2. Hòa nhập Silverlight bên trong những ứng dụng (Integrating Silverlight into Applications) Một ứng dụng nền Silverlight là nó chứa đựng những gì đã được tải lên bởi trình nhúng Silverlight (Silverlight plug-in) lên trên một trang HTML. Trình nhúng Silverlight có thể lấp đầy trang HTML hoặc chỉ một phần trống nào đó. Mặc định, một đề án Visual Studio cho phép trình nhúng chiếm 100% chiều dài và chiều rộng một trang. Nếu bạn muốn chỉ 1 phần ứng dụng sử dụng Silverlight, bạn có thể gọi chúng trong trang HTML từ đoạn mã Silverlight và ngược lại. 3. XAML XAML là một ngôn ngữ dựa trên XML, ngôn ngữ này cho phép bạn có thể xây dựng giao diện của các ứng dụng rất dễ dàng và nhanh chóng, bạn chỉ cần khai báo các thành phần có trên giao diện của ứng dụng cùng với các thuộc tính của nó, khi chạy chương trình sẽ hiển thị giống như bạn đã khai báo. Điều này cho phép tách bạch được giữa việc thiết kế giao diện và việc hiện thực hóa các tính năng. XAML có trong Silverlight là một tập con của XAML trên .NET 3.0, trong đó đã bị hạn chế một số tính năng như đồ họa 3D nhằm giữ tính tương thích trên nhiều nền tảng và trình duyệt khác nhau. Bạn có thể tạo tất cả các UI của mình trong XAML, hoặc bạn có thể sử dụng Microsoft Expression Blend để xây dựng các UI trong ứng dụng của mình. Expression Blend là một bộ công cụ thiết kế với giao diện thiết kế WYSIWYG để tạo nên những trình ứng dụng nền Silverlight. Expression Blend sinh ra một file XAML mà bạn có thể dùng để soạn thảo trực tiếp. Bạn cũng có thể móc nối những sự kiện và viết code-behind với Expression Blend. 4. Layout Khi tạo một ứng dụng nền Silverlight, điều đầu tiên bạn cần phải làm là xác định việc bố trí giao diện (UI) như thế nào. Silverlight cung cấp 3 loại panel bố trí để bạn có Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 8 Nguyễn Anh Việt Lưu Xuân Việt thể sử dụng. Trong 3 loại đó, panel Grid có tính chất mềm dẻo và mạnh mẽ nhất, do đó giá trị mặc định ban đầu là Grid Container Mô tả Canvas Vị trí tuyệt đối của những phần tử con trong không gian x,y. StackPanel Vị trí tương đối của 1 phần tử con với một phần tử khác theo chiều ngang hoặc chiều dọc. Grid Vị trí của những phần tử con trong hàng và cột. Trong ví dụ dưới đây, một phần tử hình chữ nhật là chỗ ô 1,1 của 1 Grid. Grid sử dụng chỉ mục bắt đầu là 0, vì vậy hình chữ nhật xuất hiện ở ô phải-dưới. XAML <Rectangle Fill="Red" Width="150" Height="100" Grid.Column="1" Grid.Row="1"/> Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH Hình 1 5. Control Control trong Silverlight cho phép bạn đưa ra những chỉ mục chính, hoặc những control khác và bạn có thể thiết kế thay đổi trạng thái cách hiển thị đến người dùng. Những loại Control trong hàm xử lý từ những phần tử mà cho phép người dùng tương tác như Button hoặc TextBox tới những phần tử bố trí những thông tin phức tạp hơn như DataGrid. Xuyên suốt Silverlight với những ví dụ mẫu mặc định cho mỗi loại Control và thấy được cách dùng những Control như thế nào. Tuy nhiên, bạn cũng có thể tạo nên những mẫu riêng thay đổi sự xuất hiện và cách cách xử lí nhìn trực quan hơn đối với tất cả các Control. Tiếp theo ví dụ ở trên, Chúng ta thêm một Button vào ô 0,0 của Grid. XAML SVTH: Thân Hoàng Lộc Trang 9 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH <Button Height="25" Width="100" Grid.Column="0" Grid.Row="0"/> <Rectangle Fill="Red" Width="150" Height="100" Grid.Column="1" Grid.Row="1"/> Hình 2 SVTH: Thân Hoàng Lộc Trang 10 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 11 Nguyễn Anh Việt Lưu Xuân Việt 6. Thêm những Code Logic (Adding Code Logic) Mặc định, trong một đề án Visual Studio gồm có một tập tin mã (code file), đôi khi sẽ gọi một tập tin code behind. Tập tin code thuần một ngôn ngữ và được Silverlight hỗ trợ (Support) trong suốt quá trình thực thi (CLR – Common Language Runtime) ví dụ như: C# hoặc Visual Basic. Tên của tập tin Code-Behind là Page.xaml và nó gắn liền với loại ngôn ngữ đã được chọn (Trong ví dụ này là Page.xaml.cs). Tập tin Code-Behind là nơi mà chúng ta có thể thay đổi cấu trúc logic những đối tượng trong XAML. Chúng ta có thể tạo những đối tượng UI trong đoạn code và thêm chúng lên cây hiển thị các phần tử. Trong việc thêm vào này, chúng tạo nên những lớp bên trong tập tin code-behind (Hoặc bất kỳ tập tin code nào trong đề án) có thể truy xuất được trong XAML. Trong ví dụ sau chúng ta thêm vào một sự kiện Click nhằm thay đổi màu của hình chữ nhật thành màu xanh. Trong XAML, thêm một sự kiện click vào Button và thuộc tính x:Name vào Rectangle. X:Name cho phép chúng tham chiếu vào trong Rectangle trong tập tin Code-Behind: XAML: <Button Height="25" Width="100" Grid.Column="0" Grid.Row="0" Click="Button_Click"/> <Rectangle x:Name="rect1" Fill="Red" Width="150" Height="100" Grid.Column="1" Grid.Row="1"/> Trong file Code-Behind, khai báo quản lý sự kiện click (Click event Handler): Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 12 Nguyễn Anh Việt Lưu Xuân Việt C#: private void Button_Click(object sender, RoutedEventArgs e) { rect1.Fill = new SolidColorBrush(Colors.Blue); } 7. Ngôn ngữ chức năng (Dynamic Languages) Những công cụ trong Visual Studio cho Silverlight bao gồm ngôn ngữ thực thi chức năng (Dynamic Language Runtime - DLR) cho phép người dùng sử dụng các ngôn ngữ chức năng như Python và Ruby để viết ứng dụng nền Silverlight. Ngôn ngữ chức năng là những gói mã nguồn ( Source code) không biên dịch trong quá trình lắp, nối (assemblies) và mã (code) của chúng có thể được sinh ra và biên dịch trong quá trình thực thi. Chúng tương thích tốt và mền dẻo trong quá trình tương tác trình bày. Silverlight bao gồm 3 ngôn ngữ chức năng: IronPython, IronRuby, and Managed Jscript. 8. Đồ họa (Graphics) Silverlight cung cấp nhiều tùy chọn trong việc thêm vào những tính năng trực quan trong ứng dụng của bạn. Bạn có thể sử dụng thuật vẽ (Drawing), khuôn hình (Shapes), đường vẽ (paths) và những hình học phức tạp. Khu vực khai báo hình học có thể được lấp đầy bởi nhiều hiệu ứng như: hình ảnh, độ nghiêng màu hoặc những Video clip. Bạn cũng có thể thêm vào hình ảnh hoặc hiệu ứng hình ảnh trong ứng dụng. Silverlight cũng tính đến cách nhìn theo chiều sâu (Deep Zoom) cho phép bạn dễ dàng nhìn thấy và quét góc nhìn chi tiết những hình ảnh. Ví dụ đầy đủ về hình chữ nhật với những bút kẻ nghiêng (linear gradient brush): Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 13 Nguyễn Anh Việt Lưu Xuân Việt XAML: <Rectangle x:Name="rect1" Width="150" Height="100" Grid.Column="1" Grid.Row="1"> 9. Media và Animation (Media and Animation) Ngoài việc thêm vào những hình tĩnh, bạn có thể thêm vào những ảnh động, âm thanh (audio) và video nhằm tạo nên nhiều tính năng và sự tương tác cho ứng dụng. Tiếp theo ví dụ tạo hình chữ nhật ở ví dụ trước. Chúng sẽ tự phóng to và thu nhỏ cho tới khi nhấp vào button Stop. XAML: Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 14 Nguyễn Anh Việt Lưu Xuân Việt <DoubleAnimation Storyboard.TargetName="rect1" Storyboard.TargetProperty="Height" From="0" To="100" AutoReverse="True" Duration="0:0:02" RepeatBehavior="Forever"/> <DoubleAnimation Storyboard.TargetName="rect1" Storyboard.TargetProperty="Width" From="0" To="100" AutoReverse="True" Duration="0:0:04" RepeatBehavior="Forever"/> <Button Height="25" Width="100" Grid.Column="0" Grid.Row="0" Content="Stop" Click="Button_Click"/> Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 15 Nguyễn Anh Việt Lưu Xuân Việt <Rectangle x:Name="rect1" Width="150" Height="100" Grid.Column="1" Grid.Row="1" Loaded="OnLoaded"> <GradientStop Offset="1.0" Color="Lavender"/> <Button Height="25" Width="100" Grid.Column="0" Grid.Row="1" Content="Start" Click="Button_Click_1"/> C# private void OnLoaded(object sender, RoutedEventArgs e) { AnimateRectangle.Begin(); } private void Button_Click(object sender, RoutedEventArgs e) Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 16 Nguyễn Anh Việt Lưu Xuân Việt { AnimateRectangle.Pause(); } private void Button_Click_1(object sender, RoutedEventArgs e) { AnimateRectangle.Resume(); } 10. Dữ liệu (Data) Rất nhiều ứng dụng nền Silverlight làm việc với dữ liệu. Bạn có thể hiển thị bộ dữ liệu với những Control như DataGrid và ListBox. Trong một UI, bạn có thể sử dụng Data Binding. Nếu đối tượng data có kết nối với UI, nó sẽ tự động cập nhật và truyền tới UI. Dữ liệu có thể mang vào trong ứng dụng từ những nguồn (Source) cung cấp dồi dào. Chẳng hạn như nguồn cung cấp RSS, nhưng thường định dạng theo kiểu XML. Silverlight bao gồm XmlReader và LINQ dùng cho việc phân tách dữ liệu XML. LINQ thích hợp cho việc phân tách những phần dữ liệu nhỏ. 11. Hệ thống mạng (Networking) Silverlight cung cấp vài nét đặc trưng trong sự kết nối truyền thông . Lớp WebClient điều khiển sự truyền tải nội dung tới máy trạm (Client). Bạn cũng có thể sử dụng lớp WebClient để gởi và nhận một thông điệp XML đơn giản. Ứng dụng nền Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 17 Nguyễn Anh Việt Lưu Xuân Việt Silverlight cũng có thể truy xuất Web Service như là WCF (Windows Communication Foundation), SOAP, và ASP.NET AJAX III. KIẾN TRÚC SILVERLIGHT (Silverlight Architecture) Silverlight không chỉ là một bức tranh đa dạng quyến rũ, tương tác với Web và chứa đựng Media đến với người dùng cuối (end user). Mà sức mạnh của nó là yêu cầu nền tảng phát triển nhẹ nên tính linh động cao, nền tảng đa nhiệm, ứng dụng mạng tích hợp nhiều dữ liệu và dịch vụ từ nhiều nguồn khác nhau. Hơn nữa, Silverlight cho phép bạn xây dựng những giao diện người dùng với sự thay đổi đáng kể những nét đặc trưng bởi kinh nghiệm từng trải của người dùng cuối so sánh được với những ứng dụng Web truyền thống. Trong khi Silverlight đóng vai trò như là một ứng dụng khách bên cạnh môi trường thực thi đơn và gói gọn trong 1 kích cỡ nào đó. Và nền tảng phát triển Silverlight hòa nhập với một số nét đặc trưng tiêu biểu với kỹ thuật phức tạp, chúng tạo nên sự gần gũi với người lập trình. Để tạo một ứng dụng nền Silverlight hiệu quả, người lập trình cần phải làm việc và am hiểu kiến trúc nền vững chắc. Chú ý: Phiên bản Silverlight 2 hỗ trợ 2 kiểu lập trình: JavaScript API đối với Silverlight và Quản lý (the Managed) API đối với Silverlight. Quản lý API là một tập con của .NET FrameWork. Nhiều nét đặc trưng của Silverlight mà chỉ có Managed API mới hỗ trợ được. 1. Nền tảng Silverlight (The Silverlight Platform) Nền tảng Silverlight gồm có 2 phần chính: Cài đặt và nâng cấp các thành phần. Được mô tả như bảng sau: Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 18 Nguyễn Anh Việt Lưu Xuân Việt Thành phần Mô tả Các Framework trình bày chính Thành phần và dịch vụ định hướng hướng người dùng và UI tương tác vơi nhau, bao gồm thông tin vào của người dùng, control UI dễ dùng đối với người sử dụng ứng dụng web, nghe media, quản lý kỹ thuật số, điều khiển dữ liệu, và đưa ra những nét đặc trưng, gồm định hướng đồ họa, văn bản, hình động (hoạt ảnh) và hình ảnh. Và cũng bao gồm phần mở rộng chỉ định những bố cục riêng (sử dụng ngôn ngữ XAML). .NET Framework cho Silverlight Một tập hợp con của .NET Framework chứa đựng những thành phần và thư viện, bao gồm tích hợp dữ liệu control Windows mở rộng, hệ thống mạng, lớp thư viện cơ bản, tập hợp dữ liệu rác và CLR (common Language Runtime). Một vài phần của .NET Framework cho Silverlight là sự triển khai cùng với ứng dụng. Nhiều thư viện Silverlight (Silverlight Libraries) là sự hợp thành không phải trong lúc thực thi và trong phần mở rộng của Silverlight SDK. Những thư viện Silverlight sử dụng sẽ được đóng gói cùng với ứng dụng và được tải lên trình duyệt. Bao gồm: những Control UI mới, XLINQ, Syndication (RSS/Atom), XML serialization và DLR (dynamic language runtime) Cài đặt và cập nhật (Installer and updater) Control một cài đặt và nâng cấp là một tiến trình xử lý đơn của việc cài đặt ứng dụng lần đầu tiên cho người dùng, và sau đó là hạn chế việc tác động trực tiếp để chúng tự động cập nhật. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH Hình 3. Bảng mô tả các thành phần hợp thành kiến trúc Silverlight, các thành phần quan hệ và dịch vụ SVTH: Thân Hoàng Lộc Trang 19 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 20 Nguyễn Anh Việt Lưu Xuân Việt Có những giá trị riêng trong việc thiết lập nối kết các công cụ, kỹ thuật, kể cả những dịch vụ trong nền Silverlight: chúng dễ dàng giúp người lập trình tạo nên sự phong phú, khả năng tương tác và ứng dụng mạng. Mặc dù dễ dàng thực hiện việc xây dựng những ứng dụng sử dụng những công cụ và kỹ thuật web hiện nay. Người lập trình vẫn bị cản trở bởi những kỹ thuật khó. Kể cả sự không tương thích nền tảng lập trình, sự khác nhau trong phương thức truyền và định dạng tập tin, và sự khác nhau trong những trình duyệt Web dẫn đến những trang hồi đáp, những tập lệnh truy xuất khác nhau. Một ứng dụng Web phong phú có thể chạy hoàn toàn tốt trên một hệ thống và trình duyệt nhưng nó cũng có thể hoạt động không tốt trên một hệ thống và trình duyệt khác, hoặc không chạy được. Các mảng kỹ thuật, phương thức truyền và công cụ ngày nay rất rộng, nó rất là có quy mô… - Có khả năng tạo những ứng dụng tương tự mà người dùng đã từng trải trên những trình duyệt và nền tảng đa nhiệm. Vì vậy chúng trông bắt mắt hơn và dễ thực thi hơn ở bất cứ nơi đâu. - Sự tích hợp dữ liệu và dịch vụ từ nhiều hệ thống mạng vào trong ứng dụng sử dụng những lớp .NET Framework và các hàm xử lý quen thuộc. - Media phong phú, thuyết phục và giao diện gần gũi với người dùng (UI). - Silverlight dễ dàng tạo dựng cho người phát triển xây dựng những ứng dụng. Bởi vì nó khắc phục nhiều sự không tương thích trong những kỹ thuật hiện hành và cung cấp bên trong một nền tảng công cụ tạo dựng phong phú, nền tảng đa nhiệm và những ứng dụng đồng nhất. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 21 Nguyễn Anh Việt Lưu Xuân Việt 2. Các thành phần bên trong (Core Presentation Components) Tính năng Miêu tả Input Những xử lý được nhập vào từ những thiết bị phần cứng như: bàn phím, chuột, bút vẽ (drawing) hoặc một thiết bị nhập khác. UI rendering Định hướng mô tả và những ảnh đồ họa bitmap, hình động (animations) và văn bản (text). Media Phát lại với nét đặc trưng và cách quản lý các tập tin audio và video khác nhau, chẳng hạn như những tập tin với phần mở rộng: .WMP và .MP3. Controls Hỗ trợ những control mở rộng mà có thể tùy biến tạo mẫu xuyên xuốt ứng dụng. Layout Cho phép bố trí các chứng năng của các thành phần UI. Data binding Cho phép nối kết những đối tượng và thành phần UI. DRM Cho phép quản lý số hóa các tài nguyên media. XAML Cung cấp một sự phân chia và đánh dấu cho XAML. Bảng mô tả các thành phần bên trong tiêu biểu của nền tảng Silverlight thể hiện trên hình 3 Người phát triển cũng tương tác với Framework thể hiện này bởi sử dụng XAML chỉ định rõ những chi tiết trình bày. XAML là điểm chính của sự tương tác giữa .NET Framework và các lớp thể hiện. Người phát triển có thể vận dụng những cách lập trình để thể hiện các lớp trong cách quản lý code. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 22 Nguyễn Anh Việt Lưu Xuân Việt 3. .NET Framework cho Silverlight. Tính năng Miêu tả Data Hỗ trợ ngôn ngữ truy vấn đồng nhất (LINQ) và những tính năng LINQ với XML, cái mà không bị ràng buộc bởi những tiến trình xử lý hòa nhập và làm việc với những dữ liệu từ nhiều nguồn khác nhau. Và cũng hỗ trợ sử dụng XML và những lớp sắp xếp trình bày dữ liệu. Base class library (BCL) Một bộ thư viện .NET Frameword cung cấp những hàm lập trình cần thiết như: xử lý một chuỗi ký tự (string handling), biểu thức thông thường, nhập và xuất, ánh xạ, tập hợp và toàn cầu hóa. Window Communication Foundation (WCF) Cung cấp tính năng đơn giản truy cập dữ liệu và dịch vụ từ xa. Bao gồm một đối tượng trình duyệt, yêu cầu HTTP và đối tượng trả lời, hỗ trợ những lĩnh vực giao nhau yêu cầu HTTP, hỗ trợ RSS/Atom syndication feeds, và hỗ trợ JSON, POX, và những dịch vụ SOAP. CLR (common language runtime) Cung cấp sự quản lý bộ nhớ, dữ liệu rác, kiểm tra tình trang an toàn và những xử lý ngoại lệ. WPF (Windows Presentation Foundation) controls Cung cấp những control phong phú như: Button, Calendar, CheckBox, DataGrid, DatePicker, HyperlinkButton, ListBox, RadioButton, và ScrollViewer. DLR (dynamic language runtime) Hỗ trợ biên dịch những chức năng và thi hành những ngôn ngữ kịch bản như JavaScript và IronPython trong những chương trình ứng Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 23 Nguyễn Anh Việt Lưu Xuân Việt dụng nền Silverlight. Bao gồm những mẫu gắn kết trong việc thêm vào, hỗ trợ sử dụng những ngôn ngữ khác với Silverlight. Bảng mô tả danh sách từng phần của .NET Framework với những nét đặc trưng thể hiện trên hình 3. Bộ .NET Framework cho Silverlight là một tập hợp con của bộ .NET Framework đầy đủ. Nó cung cấp những cái mạnh mẽ cần thiết, định hướng đối tượng ứng dụng phát triển cho những loại ứng dụng (như ứng dụng Internet) mà không tuân theo những hỗ trợ sẵn có truyền thống. Người phát triển có thể tương tác với những lớp .NET Framework của Silverlight bằng cách viết những mã (code) quản lý sử dụng ngôn ngữ C# hoặc Visual Basic. Người phát triển .NET Framework cũng có thể truy xuất những lớp thể hiện thông qua Visual Studio 2008 hoặc Microsoft Expression Blend. Việc thêm vào chương trình Silverlight những tính năng giúp cho người phát triển tạo được sự đa dạng và phong phú cho ứng dụng. Bao gồm những tính năng mô tả trong bảng sau: Tính năng Miêu tả Isolated storage Cung cấp sự truy xuất an toàn từ máy trạm (Client) Silverlight tới những tập tin cục bộ hệ thống. Cho phép lưu giữ cục bộ và tạm thời những dữ liệu riêng của người dùng. Asynchronous programming Một nền của người làm việc với những chuỗi chứa đựng những yêu cầu lập trình bên ngoài trong khi ứng dụng không ràng buộc người sử Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 24 Nguyễn Anh Việt Lưu Xuân Việt dụng tương tác. File management Cung cấp sự an toàn trong hộp thoại mở tập tin (file), không ràng buộc quá trình tạo những tập tin upload an toàn. HTML– managed code interaction Cho phép người lập trình .NET Framework trực tiếp thao tác trên phần tử UI trong HTML DOM của trang Web. Người lập trình Web cũng có thể sử dụng JavaScript để gọi trực tiếp những code quản lý bên trong và truy xuất đối tượng scriptable, thuộc tính (properties), Sự kiện (events), và phương thức (methods). Serialization Cung cấp sự hỗ trợ đa dạng của kiểu CLR với JSON và XML. Packaging Cung cấp những lớp ứng dụng và xây dựng công cụ tạo những gói .xap. Những gói .xap chứa đựng ứng dụng và những điểm tiếp nhận điều khiển (control) việc chạy của Silverlight plug-in. XML libraries Những lớp XmlReader và XmlWriter đơn giản hóa việc làm việc với dữ liệu XML từ những dịch vụ Web (Web services). Tính năng Xlinq cho phép người lập trình truy vấn dữ liệu trực tiếp bên trong ngôn ngữ lập trình .NET Framework. 4. Hỗ trợ những hệ điều hành và trình duyệt. Bởi vì Silverlight là một ứng dụng nền đa nhiệm, chúng chạy trên hầu hết những trình duyệt Web hiện hành. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH Hình 4: Bảng mô tả tính tương thích của hệ điều hành và trình duyệt (Nguồn ) IV. MÔ HÌNH ỨNG DỤNG VÀ LẬP TRÌNH Mục tiêu của Silverlight 2 đối với hầu hết các ứng dụng là viết code quản lý sử dụng những ứng dụng mới nhất trong Silverlight. Bên cạnh đó, bạn có thể sử dụng những tùy chọn để làm đơn giản hóa thay cho những mẫu lập trình. Silverlight cung cấp 2 kiểu lập trình riêng biệt trong việc xây dựng những ứng dụng: SVTH: Thân Hoàng Lộc Trang 25 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 26 Nguyễn Anh Việt Lưu Xuân Việt - Quản lý API với Silverlight. Mục đích nhằm biên dịch và chạy code trên CLR (common language runtime) hoặc trên DLR (dynamic language runtime) đối với Silverlight. - JavaScript với Silverlight. Thể hiện lên trình duyệt sử dụng code JavaScript. Những mô hình lập trình này hoàn toàn khác biệt bởi vì chúng ta không thể đồng thời sử dụng cả hai kiểu lập trình trên đối với một trường hợp cụ thể trong một Silverlight plug-in. Tuy nhiên, bạn cũng có thể thi hành việc trang trí màn hình nền bằng cách sử dụng một đoạn code JavaScript khi chuyển trạng thái qua managed API trong lúc tải ứng dụng lên. The managed API cung cấp nhiều hàm xử lý hơn JavaScript API, và đây là một điểm nổi bật của Silverlight. Những ứng dụng sử dụng managed API truy xuất tới những phiên bản .NET Framework nhẹ hơn. Còn đối với JavaScript API chỉ truy xuất và thể hiện nội dung của Silverlight và những đoạn JavaScript nhúng vào trình duyệt. 1. Lập trình quản lý và mô hình ứng dụng (Managed Programming and the Application Model) Managed API cho phép bạn gói những trình điều khiển và những tập tin tài nguyên vào trong một gói tập tin ứng dụng (.xap). Silverlight plug-in có nhiệm vụ tải những gói ứng dụng này lên và rút trích nội dung bên trong. Một gói ứng dụng chỉ chứa một nhóm hành động với những lớp đã được khai báo trên ứng dụng. Lớp ứng dụng gói gọn sự tương tác giữa ứng dụng và Silverlight plug-in. Chẳng hạn như, nó cho phép bạn trình bày một giao diện người dùng tương tác với trang web chủ. Thêm vào đó, nó cung cấp những event của ứng dụng thường trực và quản lý tài nguyên. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 27 Nguyễn Anh Việt Lưu Xuân Việt Điểm mạnh của Silverlight là sử dụng những mô hình ứng dụng giới hạn đề cập tới những gói ứng dụng và những hàm đã được đóng gói bởi những lớp Application. Mô hình ứng dụng giúp chúng ta trình bày được cả những ứng dụng đơn giản và phức tạp. Có thể mở rộng ứng dụng này bằng cách chia sẻ những tài nguyên trên mạng. A. Managed API for Silverlight Bạn có thể sử dụng ngôn ngữ đánh dấu XAML gói gọn những giao diện người dùng đã thiết kế vào trong managed API và JavaScript API. Với managed API, bạn có thể đưa thừa số code ứng dụng vào nhiều tập tin (File) và cung cấp thêm code-behind kèm theo. Khi Silverlight plug-in tải những những tập tin XAML lên, nó sẽ tạo ra một cây đối tượng mà những mã bên trong (code-Behind) có thể thao tác. Những mã quản lý ứng dụng cũng có thể được thao tác bởi HTML DOM (Document Object Model) thông qua cầu nối HTML. Silverlight API định nghĩa việc thiết lập đối tượng y như là một cây đối tượng mà cho phép bạn chứa đựng nội dung khởi tạo ban đầu của ứng dụng nền Silverlight được tải lên bởi XAML, và điều chỉnh cây đối tượng này trong thời gian thực thi. Bên trong managed API, sự tương tác với cây đối tượng Silverlight là định nghĩa với managed code. Sử dụng CLR, managed code là sự biên dịch vào bên trong assembly. Assembly tiêu biểu cũng chứa đựng XAML cho ứng dụng nền Silverlight. Managed code có thể Support cho mô hình ứng dụng Silverlight, và có thể gọi hồi đáp của đối tượng trong suốt thời gian sống của những event, hoặc là những event khởi tạo user. Bạn cũng có thể sử dụng managed code để viết những lớp hỗ trợ, định nghĩa những đối tượng data, và cho nhiều những kịch bản ứng dụng khác. Bạn cũng có thể sử dụng DLR nhiều hơn CLR, vấn đề này đang được tranh luận trong Dynamic Languages in Silverlight 2. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 28 Nguyễn Anh Việt Lưu Xuân Việt ¾ Đặc điểm của Managed API (Characteristics of the Managed API) a. Managed Code là sự mở rộng Trong Silverlight 1.0 trước đây, và bên dưới JavaScript API hiện tại (độc lập với version client) không hỗ trợ cho việc khai báo hạn chế một tùy chọn phần tử UI. Bạn có thể kết hợp một phần tử và khi tải chúng mất nhiều thời gian từ khai báo tương tự của XAML, và gán những hàm tương tự như code hỗ trợ. Nhưng điều này gần như không hỗ trợ cho việc co giãn, phóng to kích thước. Sử dụng Managed API, tính co dãn hoàn toàn là một vấn đề xuất phát từ những lớp hoặc control hiện hành được hỗ trợ một cách hữu ích trong những hàm xử lý cơ bản. Và cũng có thể khai báo bằng một số phần tử hỗ trợ như: tạo mới một control template, cập nhật những lớp event handle…v…v…Mở rộng việc quản lý code cũng là khái niệm cơ bản của việc quản lý và lập trình .NET Framework và đây cũng không phải là một vấn đề đơn giản trong Silverlight. b. Cây đối tượng (Object Trees) Cây đối tượng là khái niệm tồn tại trong JavaScript API, và sự vận dụng cây vào trong mô hình này cũng có giới hạn bởi vì nó không có một đối tượng kỹ thuật khởi tạo. Trong quản lý API, bạn có thể gọi hàm khởi tạo bên trong những lớp và có thể thêm vào cây mà không cần sử dụng phân tích XAML làm trung gian. Thật ra, bạn có thể xây dựng một cây thật quy mô hoàn toàn trong khai báo code bằng cách gọi sự khởi tạo liên tục và thêm những đối tượng vào cây đối tượng bắt đầu từ root và xuyên suốt trong các thuộc tính con (Children). Bạn có thể tham chiếu các đối tượng trong cây đối tượng suốt thời gian thực thi của Silverlight bằng cách quản lý code hoặc JavaScript. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 29 Nguyễn Anh Việt Lưu Xuân Việt c. Quản lý code-behind và các lớp cục bộ (Managed Code-Behind and Partial Classes) Kỹ thuật chính trong việc khai báo một UI trong Silverlight là việc định nghĩa các phần tử trong việc tạo XAML. Điều này gồm cả việc sử dụng những Style và Template, chúng cũng được khai báo bên trong việc tao XAML. Trong nhiều trường hợp bạn sẽ muốn đưa những đối số khác nhau vào trong những file XAML mà được tích hợp trong những mô hình ứng dụng Silverlight. Để định nghĩa một tương tác cần thiết trong ứng dụng, bạn thường muốn định nghĩa event handler mà đáp lại tới đối tượng trong suốt thời gian event sống hoặc event khởi tạo user cho những đối tượng được khai báo trong XAML. Trong quản lý API, mỗi trang XAML là nơi chứa đựng những event handling hoặc nội dung của những phần tử root. Chúng chỉ được đưa vào quá trình thực thi như là một phần tất yếu của quá trình xây dựng. Sự đưa vào quá trình thực thi này cung cấp những móc nối cần thiết trong suốt thời gian chạy tương tác với cây đối tượng được tạo ra khi trang XAML tải lên. Những móc-nối này bao gồm những event handler tốt nhất tham chiếu tới bất kỳ đối tượng nào được đặt Name hoặc x:Name trong XAML. Trong cấu trúc Silverlight, XAML không biên dịch hết nội dung bên trong nó. Nhiều cây đối tượng được tạo ra trong XAML cho UI bị trì hoãn lại cho tới khi trang XAML thực sự được tải lên hết trong ứng dụng đang chạy và được xử lý bằng những đoạn XAML Silverlight. Code-Behind là một thuật ngữ sử dụng miêu tả code tham gia vào một lớp thành phần với trang XAML khi tạo dựng hoặc biên dịch ứng dụng. d. Chuẩn hóa tương tác DOM (Formalized DOM Interaction) Trong JavaScript API, tham chiếu đối tượng hoặc biến trong HTML DOM từ Silverlight nguyên bản hoặc ngược lại không có liên quan gì bởi vì chính nó đã có thể trình bày được bởi sự tồn tại của nó trong trình duyệt hoặc trong một phạm vi nào đó. Trong code quản lý API, một phân đoạn định dạng đã tồn tại bởi vì code quản lý sử dụng Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 30 Nguyễn Anh Việt Lưu Xuân Việt thư viện trong Silverlight và chính CLR chứ không phải là trình duyệt. Sự tương tác với DOM từ quản lý API, bạn có thể sử dụng một chuỗi những đặc trưng mà đôi khi những tập chuỗi này được tham chiếu như là một cầu nối HTML, hoặc cầu nối HTML DOM. Bao gồm những phần sau: • APIs đưa ra những nhiệm vụ xử dụng DOM phổ biến (trong những trường hợp, tài liệu đối tượng) để code quản lý. • Điều kiện dễ dàng có thể tạo những kiểu quản lý chính từ DOM. • Kỹ thuật chuyển đổi những kiểu quản lý phát sinh từ những giá trị hoặc đối tượng chính JavaScript. • APIs đưa ra những nét đặc trưng của đối tượng Silverlight plug-in trình bày trong DOM. B. JavaScript API for Silverlight JavaScript API là một mô hình đã được tích hợp sẵn trong bản Silverlight 1.0, và nó vẫn giữ được tính tương thích cũng như chạy những kịch bản ngoại lệ. Trong JavaScript API, Silverlight plug-in tải lên một trang XAML đơn thay vì một gói ứng dụng. Trang XAML có thể bao gồm URL tham vấn tới một tài nguyên bên ngoài máy chủ (Server), như là hình ảnh và Video. Silverlight plug-in sử dụng XAML để tạo nên một cây đối tượng mà chúng ta có thể vận dụng nhiều cách lập trình sử dụng JavaScript trong tranh HTML chính. JavaScript không cung cấp một mô hình ứng dụng riêng nhưng nó hỗ trợ với sự điều hướng trong nội dung ứng dụng để giải quyết những vấn đề phức tạp. Bên cạnh đó, nó cũng có thể giải quyết những kịch bản “cồng kềnh” như trong managed API ví dụ như trang trí màn hình nền (splash screens). Bạn cũng có thể tải lên những trang XAML mới Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 31 Nguyễn Anh Việt Lưu Xuân Việt trong Silverlight plug-in hoặc những trang web mới trong trình duyệt và định hướng thực thi ban đầu cho chúng. Trong một vài trường hợp, JavaScript API với Silverlight phụ thuộc vào nhau nhiều hơn so với Code quản lý. 1. Cân nhắc kiểu lập trình (Programming Model Considerations) JavaScript API với Silverlight là kiểu lập trình mà đã được tích hợp sẵn trong phiên bản 1.0 của Silverlight. Nó sử dụng những tập con nhỏ của đối tượng mà sẵn sàng dùng được trong Silverlight 2, cộng với một số đối tượng riêng biệt trong JavaScript API. Tập con này cũng cân nhắc sự ảnh hưởng với những đối tượng mà bạn khai báo trong XAML. Phân tách XAML của Silverlight chỉ tạo nên đối tượng bên trong cây đối tượng của những tập con này. Bởi vì cây đối tượng được tạo nên trên nền code cố định thi hành những cái bên dưới JavaScript. Nói cách khác, tập con và sự cân nhắc giới hạn mà áp dụng với JavaScript API cho Silverlight là sự có thật nhiều hơn ngôn ngữ mà bạn lựa chọn để viết cho chuỗi lý luận bên trong code-behind; Lựa chọn lập trình kiểu API cho phép bạn xác định rõ những đối tượng nào sẵn dùng trong ứng dụng. Nếu bạn đã phát triển trong Silverlight 1.0, chắc chắn bạn đã quen thuộc với JavaScript API trong Silverlight. Lập trình JavaScript API tương tự như trong HTML DOM, và thực ra là sự thi hành những kịch bản nhúng trong trình duyệt giống như là kịch bản trong DOM. Nhưng mô hình Silverlight mở rộng trong cây đối tượng mà được tạo nên khi một trang XAML tải lên những nội dung co Silverlight plug-in. Điều này cho phép bạn xử lý những event trên đối tượng tiêu biểu mà bạn đã định nghĩa trong XAML. Get hoặc set giá trị thuộc tính hoặc thi hành những phương thức đối tượng trong thời gian chạy, chỉnh sửa cấu trúc của XAML, tạo cây đối tượng trong thời gian chạy và…v.v… Trong điều kiện của cấu trúc, JavaScript API cho phép một hướng mở trong cây đối tượng Silverlight trên Silverlight plug-in, bao bọc những kịch bản được triệu gọi, và kết thúc chúng trong plug-in như những đối tượng tự nhiên. Trong Internet Explorer việc Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 32 Nguyễn Anh Việt Lưu Xuân Việt bao bọc được thực hiện khi gọi IDispatch::Invoke. Còn trong những trình duyệt khác có khả năng sử dụng những kiểu bao bọc khác phụ thuộc vào những plug-in và cấu trúc kịch bản. 2. Kịch bản cho khai báo JavaScript API (Scenarios for Using the JavaScript API) ¾ Splash Screens Một Splash Screens là nội dung một khu vực khởi tạo để trình bày tới user trong khi những nội dung khác vẫn tiếp tục đang tải lên. Bên trong điều kiện thiết kế và mục đích, một Splash Screens đã ngầm quan hệ với UI và những yêu cầu tương tác. Mục đích chính của Splash Screens là: • Thể hiện tính trực quan thú vị. • Cung cấp thông tin phản hồi tới user mà ứng dụng (hoặc brower host) vẫn còn những hàm xử lý như mong đợi và tải chúng về như là sự phát triển. • Giữ những thông tin đặc trưng trong tiến trình tải về. Hai hàm đầu tiên có đủ tính năng thường thấy trong XAML mà không cần code- behind bên trong. Miễn là tiến trình tải về yêu cầu thu được những thông tin tối thiểu của một API từ lớp mạng mà nó thực hiện việc tải về. Có những lý do một Splash Screens là phương tiện tốt nhất bởi sự khai báo JavaScript API và truyền tải một trang XAML (Được hỗ trợ bởi Script code Behind) cho SplashScreenSource. JavaScript API có thể tải về Splash Screen mà không cần tác động tới Silverlight CLR và liên quan tới assemblies để rút ngắn thời gian khởi động. 3. Phiên bản JavaScript mới cho Silverlight 2 (New JavaScript API for Silverlight Version 2) Silverlight 2 cung cấp việc thêm vào những đối tượng có thể sử dụng trong JavaScript API khác với việc thiết lập những đối tượng trong Silverlight 1.0. Nó hoàn toàn cho phép bởi vì những đối tượng này có sự thi hành tự nhiên mà nó trình bày tương tự như việc Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 33 Nguyễn Anh Việt Lưu Xuân Việt khởi tạo một đối tượng trong bản 1.0. Bạn có thể tạo những đối tượng này trong bên trong XAML và sau đó script đến cây đối tượng. Để sử dụng những đối tượng này, client chạy những ứng dụng nền Silverlight nên có bản chạy Silverlight version 2 client. Việc thêm vào những đối tượng với JavaScript API là bao gồm bên trong những tư liệu Silverlight cho JavaScript (Như thuộc tính-Properties, phương thức-Method, event, và bảng liệt kê- enumerations). Đây là những tài liệu cấp cơ bản. Đối tượng mới và thành viên mới cần chú ý tới những thông tin của phiên bản tham khảo trong trang chủ. 4. Những kỹ thuật riêng của JavaScript API (Technical Specifics of the JavaScript API) Có một vài kỹ thuật riêng trong JavaScript API khác với việc quản lý API và sự mở rộng sang nhiều những phần tử JavaScript API - JavaScript và các trường hợp nhạy cảm (JavaScript and Case Sensitivity) Các đối tượng, phương thức và tên thuộc tính trong JavaScript là không được xem xét như là trường hợp nhạy cảm khi được xử lý bởi Idispatch hoặc kỹ thuật song song mà là bên ngoài Silverlight JavaScript API tới tập lệnh nhúng vào trong Brower Hosting. Vì vậy, bạn có thể dùng chữ hoa để khởi tạo trong giá trị thuộc tính event XAML và chữ thường trong những phương thức được định nghĩa hiện tại nếu bạn thích. Tuy nhiên, tài liệu cú pháp Silverlight và những tiêu đề trong những text mô tả chung phải chuẩn hóa những trường hợp cho đối tượng-object, thuộc tính-properties, phương thức-method, events, bảng liệt kê- enumerations, và các giá trị liệt kê ban đầu sử dụng chữ hoa tốt hơn là sử dụng chữ hoa bên trong. Có hai lý do: • XAML rất nhạy cảm trong việc phân biệt chữ, bởi vì nó theo chuẩn XML. Cú pháp XAML và những tập lệnh tương đương thường có mặt trong một trang đơn. Vì vậy, nó cần một chuẩn hóa trong XAML. Titling mà bạn thấy trong tài Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 34 Nguyễn Anh Việt Lưu Xuân Việt liệu Silverlight là những biểu mẫu trường hợp chính xác cho một phần tử đối tượng hoặc thuộc tính XAML. • Quản lý API xử lý tất cả các trường hợp như là trường hợp nhạy cảm, khai báo như trong quy ước Pascal. Hiện tại JavaScript tham chiếu trường hợp tương đương ở mức cao hơn không cần đường dẫn. C. JavaScript và HTML DOM JavaScript API và managed API đều cho phép bạn sử dụng JavaScript trong trang HTML chính tích hợp Silverlight với HTML DOM (Document Object Model). Trong JavaScript API, bạn chỉ thực thi những hàm ứng dụng sử dụng trong trình duyệt mà JavaScript đã khai báo. Chúng cũng có thể tương tác trực tiếp với DOM. Trong managed API, những mã JavaScript và DOM tương tác với Silverlight plug-in và mô hình ứng dụng sử dụng cầu nối HTML. 1. Cấu trúc ứng dụng (Application Structure) Khi bạn tạo một ứng dụng nền Silverlight sử dụng managed API, tiến trình xử lý sẽ sinh ra một gói ứng dụng. Gói ứng dụng được nén lại trong tập tin có phần mở rộng là .xap và nó chứa đựng những tập tin cần thiết để bắt đầu một ứng dụng. Khi nhúng Silverlight plug-in vào trang Web, bạn có thể chỉ định rõ những gói ứng dụng nào mà Plug-in cần tải về. Plug-in sử dụng một tập tin hiển thị trong gói ứng dụng để nhận dạng những lớp ứng dụng đã được triệu gọi. Những lớp này được biết đến như là một điểm mục (entry) của ứng dụng và nó chỉ bắt nguồn từ những lớp Application. Đối với những ứng dụng riêng lẻ, plug-in cũng sẽ triệu gọi những tập xử lý (essemble) căn bản chi tiết mà nó thừa hưởng. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 35 Nguyễn Anh Việt Lưu Xuân Việt Lớp Application cung cấp một sự kiện bắt đầu (Startup event) để bạn có thể khởi tạo những handle ban đầu cho ứng dụng và giao diện người dùng. Lớp Application cũng cung cấp những yêu cầu dịch vụ ứng dụng phổ biến khác. Ví dụ bạn có thể sử dụng lớp Application để rút trích những tập tin tài nguyên từ những gói ứng dụng hoặc tải về từ những tập tin zip. Quá trình tải về (download) một gói ứng dụng và ngay lập tức gọi hệ thống kích hoạt Silverlight. Hệ thống kích hoạt cho phép bạn chỉ định giá trị nhỏ nhất của gói tải về. Sau khi kích hoạt, ứng dụng của bạn có thể truy xuất tới những tập xử lý (assemble) đã thêm vào trong thư viện và những tập tin tài nguyên theo yêu cầu. 2. Gói ứng dụng (Application Package) Một gói ứng dụng bao gồm những tập tin: - Một tập tin AppManifest.xaml, nó nhận dạng những bộ xử lý đã đóng gói và điểm bắt đầu của ứng dụng. - Một bộ xử lý ứng dụng, bao gồm những lớp ứng dụng. - Không, hoặc nhiều thư viện những bộ xử lý. - Không, hay nhiều tập tin tài nguyên không xác định, ví dụ như hình ảnh (image) hoặc những tập tin Video. Tập tin AppManifest.xaml là tập tin tự động sinh ra (generate) điển hình trong quá trình xây dựng và sử dụng ngôn ngữ đánh dấu XAML để trình bày một đối tượng Deployment với trình ứng dụng. Trong tập tin AppManifest.xaml, phần tử Deployment bao gồm những thuộc tính: - Thuộc tính RuntimeVersion nhận dạng phiên bản yêu cầu của Silverlight. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 36 Nguyễn Anh Việt Lưu Xuân Việt - Thuộc tính EntryPointType và EntryPointAssembly nhận dạng mục bắt đầu của ứng dụng. Phần tử Deployment cũng bao gồm một phần tử đặc tính con Deployment..::.Parts mà có một phần tử con AssemblyPart riêng cho mỗi assembly trong một gói ứng dụng. Gói ứng dụng chỉ bao gồm một tập tin AppManifest.xaml và một entry-point của assembly ứng dụng. Bạn cũng có thể triển khai tất cả các thành phần ứng dụng khác trong file đóng gói (in-package) hoặc trong file yêu cầu (on-demand). Trong file đóng gói là những file được chứa đựng bên trong gói ứng dụng. Điển hình là những file tối thiểu để bắt đầu ứng dụng hoặc triệu gọi những file sẵn sàng dùng đến sau khi khởi động. Bạn cũng có thể chia sẻ những nguồn tài nguyên như hình ảnh nhúng trực tiếp vào trong assembly hoặc những file riêng biệt trong phạm vi của gói ứng dụng. Những file yêu cầu là những file mà bạn triển khai trên máy chủ (Server). Chẳng hạn như vị trí của các gói ứng dụng. Ứng dụng của bạn có thể truy xuất những file này sau khi chúng được kích hoạt. Độc lập về kích thước và thể loại file nên có thêm vài tùy chọn trong việc truy xuất những file yêu cầu này. Ví dụ như bạn có thể sử dụng tham chiếu trực tiếp URL để truy xuất những file hình ảnh (Image) hoặc bạn có thể đồng bộ sự bắt đầu trong việc tải về hay truy xuất những thư viện assembly hoặc những file zip. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH Hình 5: Biểu đồ tổng hợp những gói cấu trúc ứng dụng và những tùy chọn triển khai trong những file ứng dụng. 3. Triển khai file trong những gói hoặc trong những yêu cầu (Deploying Files In- Package or On-Demand) Việc triển khai những file ứng dụng bên trong những gói ứng dụng được diễn ra trong thời gian khởi động và trong lúc tải về, chúng chỉ ngưng khi bạn quyết định ngừng những tiến trình này lại. Quyết định này hoàn toàn độc lập với những yêu cầu của ứng dụng. Chẳng hạn, bạn có thể cho phép khai báo nhiều file vào bên trong những gói ứng dụng và lần lượt nhận được những hồi đáp sau khi bạn bắt đầu thực hiện (Startup). Trong trường hợp này bạn có thể duy trì trạng thái hồi đáp hiển thị lên màn hình khi bắt đầu tiến trình tải về. SVTH: Thân Hoàng Lộc Trang 37 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 38 Nguyễn Anh Việt Lưu Xuân Việt Trong một vài trường hợp, Silverlight plug-in sẽ không thể tải lên những gói ứng dụng lớn. Khi bạn khởi tạo những ứng dụng lớn, bạn nên triệu gọi những file cần thiết để tối ưu hóa kích thước dữ liệu. Khi bạn quyết định di chuyển một vài file ra ngoài gói ứng dụng, bạn nên bố trí lại một vài tùy chọn. Những file dễ dàng bố trí lại là những file tham chiếu (reference) trong khai báo quan hệ URIs ví dụ như những file video và image. Khi Silverlight plug-in bắt gặp một quan hệ URL trong code hoặc XAML nó sẽ được nhìn thấy trong gói ứng dụng đầu tiên. Nếu plug-in không thể tìm thấy file trong gói ứng dụng thì nó sẽ thấy được bên trên máy chủ. Nghĩa là bạn có thể di chuyển bất kỳ file nào mà bạn tham chiếu bởi quan hệ URL mà không cần phải thay đổi code. Nhiều file không thể tham chiếu bằng URL và nó phụ thuộc vào những tiến trình xử lý riêng nếu bạn bố trí lại những file yêu cầu này. Ví dụ như, bạn muốn bố trí lại thư viện assembly, bạn nên thêm code để triệu gọi những yêu cầu và tải chúng lên vùng ứng dụng. Bạn cũng có thể muốn di chuyển một vài file tài nguyên ra ngoài những gói ứng dụng nhưng truy xuất chúng trong yêu cầu như là tải 1 trình đơn về. Bạn cũng có thể thực hiện những điều trên bằng cách gói chúng lại thành những file zip và triển khai chúng lại trên máy chủ. V. ỨNG DỤNG DỊCH VỤ (Application Services) Khi bạn tạo một ứng dụng sử dụng managed API với Silverlight, bạn nên tạo một lớp mà bắt nguồn từ Application. Lớp Application cung cấp một vài dịch vụ mà những ứng dụng thường cần tới. Trước hết, nó miêu tả những entry point của code ứng dụng trong suốt chu trình sống của Silverlight plug-in. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH Chu trình sống của Silverlight plug-in bắt đầu khi user “lướt” vào trang web chứa Silverlight plug-in. Nếu user đã cài đặt Silverlight, trình duyệt web sẽ kích hoạt plug-in và bắt đầu tải những gói ứng dụng của bạn xuống. Plug-in được nạp vào trong theo dịch vụ của Silverlight bởi Silverlight CLR, chúng tạo ra một AppDomain cho ứng dụng. Khi những gói ứng dụng của bạn hoàn tất việc tải về, CLR sẽ triệu gọi lớp Application và sinh ra những event Startup. Bạn có thể thêm code vào những lớp ứng dụng. Bên cạnh đó,bạn sử dụng một event handle startup cho hầu hết những yêu cầu khởi tạo ứng dụng, như trình bày một trang giao diện người dùng. Hình 6: Biểu đồ minh họa quy trình kích hoạt plug-in và mối quan hệ giữa các thành phần trong quy trình SVTH: Thân Hoàng Lộc Trang 39 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 40 Nguyễn Anh Việt Lưu Xuân Việt Chúng cũng có thể chỉ là một trường hợp Application trong ứng dụng nền Silverlight. Sau khi khởi động (Startup), trường hợp Application này cung cấp một vài dịch vụ mà ứng dụng thường cần tới. bạn có thể truy xuất những dịch vụ này từ bất kỳ đoạn code nào trong ứng dụng bởi sự truy xuất trường hợp Application từ đặc tính tĩnh của Application..::.Current. Những đặc trưng trong lớp Application gồm: • Quản lý thời gian sống của ứng dụng. • Tải lên những file tài nguyên của ứng dụng. • Xử lý những ngoại lệ Unhandled. • Tích hợp những Web host. 1. Application Lifetime Management Để quản lý thời gian sống của ứng dụng bạn có thể thêm code vào trong những lớp ứng dụng để chạy và bắt điểm thời gian sống của ứng dụng: • Lớp khởi tạo ứng dụng. • Event Startup ứng dụng. • Event Exit ứng dụng. a. Lớp khởi tạo ứng dụng (Application Class Construction) Trong lớp ứng dụng khởi tạo, bạn có thể thêm code vào trong lớp ứng dụng khởi tạo để thi hành những yêu cầu khởi tạo cơ bản, chẳng hạn như những biến khởi tạo và những event handler kèm theo. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 41 Nguyễn Anh Việt Lưu Xuân Việt Hầu hết những lớp ứng dụng được định nghĩa đều sử dụng ngôn ngữ đánh dấu XAML và một file code-behind. Việc xây dựng những lớp ứng dụng tiêu biểu này bao gồm việc triệu gọi một phương thức InitializeComponent để hồi đáp trong việc kết hợp XAML với những file code-behind. Quá trình xây dựng sinh ra và thực thi một phương thức InitializeComponent để nạp lên XAML bởi việc triệu gọi phương thức Application.LoadComponent. Ứng dụng XAML có thể chỉ định event handle ứng dụng và sẽ cư trú trong thư mục Application.Resources với thuộc tính và kiểu dáng sử dụng trong toàn thể ứng dụng. b. Application Startup Event Application.Startup xuất hiện khi Silverlight plug-in kết thúc quá trình tải những gói ứng dụng lên. Tại thời điểm này, tất cả bên trong các gói assemblies đã được tải lên bên trong vùng ứng dụng và sẵn sàng sử dụng. Bạn có thể sử dụng event Startup để thi hành những yêu cầu khởi tạo phổ biến như: • Xử lý dữ liệu được gọi trong quá trình khởi động, như khởi tạo và tham số URL hoặc lưu dữ liệu vào trong những phiên làm việc trước. • Trình bày giao diện người dùng (UI). • Bắt đầu không đồng bộ việc tải xuống khi thêm vào những file tài nguyên hoặc assemblies. Sau đây là mô tả ngắn gọn cách thực hiện các yêu cầu và cung ca61op những Link thông tin: c. Processing Startup Data Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 42 Nguyễn Anh Việt Lưu Xuân Việt Để truy xuất những tham số khởi tạo ban đầu trong việc cấu hình Silverlight plug- in, cần sử dụng thuộc tính StartupEventArgs.InitParams. Khi truy xuất tham số URL từ trang web chủ, cần sử dụng thuộc tính HtmlDocument.QueryString. Bạn có thể truy xuất đối tượng HtmlDocument từ thuộc tính tĩnh HtmlPage.Document. Nhưng cần chú ý thuộc tính Document có thể không sử dụng được nếu việc truy xuất HTML thất bại. Đây cũng là một trường hợp điển hình khi gọi một ứng dụng nền Silverlight trong trang web chủ từ một vùng (Domain) khác. Để truy xuất dữ liệu từ những phiên làm việc trước, ta sử dụng lớp IsolatedStorageSettings. Để khởi tạo data luôn sẵn sàng tương tác trong ứng dụng, cần thêm vào thư mục Application.Resources. d. Displaying the User Interface Để hiển thị UI ứng dụng, cần set thuộc tính RootVisual trong event handler Startup. Bạn chỉ có thể set thuộc tính này ở lần đầu tiên, nhất là ở UserControl cung cấp một Layout Root cho UI. Bạn có thể thay đổi UI của mình sau khi khởi tạo bằng cách thay đổi nội dung của Layout root. Chú ý: Event Startup có thể xuất hiện trước khi trang web chủ tính toán việc sắp đặt layout. Nếu bạn sử dụng những quan hệ kích thước trong Silverlight plug-in, giá trị Content.ActualHeight và ActualWidth sẽ không có ý nghĩa trong ứng dụng khởi tạo. Để Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 43 Nguyễn Anh Việt Lưu Xuân Việt co giãn UI hoặc thi hành những layout nền trong kích thước hiện tại của plug-in, bạn có thể sử dụng handle Content.Resized event. e. Truy xuất những tài nguyên thêm vào (Retrieving Additional Resources) Để đồng bộ những file tài nguyên hoặc assemblies thêm vào, ta sử dụng lớp WebClient. Nếu là file zip, bạn cần phải sử dung phương thức Application.GetResourceStream(StreamResourceInfo, Uri) để rút trích những nội dung bên trong sau khi tải về. Nếu là file trong assembly, bạn có thể tải chúng vào trong ứng dụng AppDomain bằng cách tạo mới một đối tượng AssemblyPart và gọi phương thức Load. f. Application Exit Event Application.Exit xuất hiện khi một hành động tiếp diễn đưa ra yêu cầu: • User đóng trang web chính Silverlight plug-in. • User refreshes trang web chính. • User lướt trình duyệt từ trang web chính. • Trang web chính sử dụng JavaScript và HTML DOM gỡ bỏ plug-in trong trang web. • User logs off hoặc shuts down hệ điều hành. Một cách phổ biến trong việc sử dụng Event Application.Exit là việc sử dụng lớp IsolatedStorageSettings để lưu lại việc bố trí các ứng dụng. 2. Application Resource File Loading Silverlight có khả năng cung cấp rộng lớn đối với việc tải lên những file tài nguyên từ một ứng dụng assembly, một thư viện assembly, một gói ứng dụng và một host server. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 44 Nguyễn Anh Việt Lưu Xuân Việt Những sự hỗ trợ này phụ thuộc và việc bạn định cấu hình cho những file tài nguyên, triển khai chúng ở đâu và tải chúng lên như thế nào. Lập trình truy xuất những file tài nguyên thô sử dụng phương thức Application..::.GetResourceStream. Phương thức này quy định dung lượng cho phép rút trích những file tài nguyên từ gói ứng dụng hoặc từ file zip mà bạn truy xuất theo yêu cầu. 3. Xử lý những ngoại lệ Unhandled (Unhandled Exception Processing) Trong suốt thời gian sống của ứng dụng, có những trạng thái mà không thể lường trước được xuất hiện mà nguyên nhân đó Silverlight plug-in đưa vào những ngoại lệ. Mặc dù bạn có thể bắt được những ngoại lệ đó trong code ứng dụng, nhưng cũng không thể bắt được hết những ngoại lệ tiềm tàng. Ngoại lệ Unhandled sẽ là nguyên nhân Silverlight plug-in dừng tiến trình chạy trong trình duyệt. Event handle Application..::.UnhandledException sinh ra việc ngăn cản này. Bạn có thể sử dụng event data để xác định xem ngoại lệ này có thể cứu chữa hay không.Nếu có thể, hãy đặt thuộc tính ApplicationUnhandledExceptionEventArgs..::.Handled là true. Nếu bạn không xử lý ngoại lệ này trong code quản lý, Silverlight plug-in sẽ xuất hiện event onError. Nó sẽ đưa cho bạn một cơ hội kết thúc xử lý ngoại lệ bằng cách sử dụng JavaScript trong trang web chính. Event onError đưa ra lỗi code truy xuất plug-in, điều này rất hữu ích trong việc debug. 4. Host Integration Điều này thỉnh thoảng hữu ích cho code quản lý tương tác trực tiếp với Silverlight plug-in trên host. Chẳng hạn như, bạn có thể muốn truy xuất giá trị cấu hình ban đầu của plug-in, hoặc cho phép user xem plug-in ở chế độ full-screen. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH Việc truy xuất một đối tượng được miêu tả trong host plug-in hiện hành ta sử dụng thuộc tính Application..::.Host. Thuộc tính này trả về một trường hợp của lớp SilverlightHost, mà cung cấp hàm xử lý song song những tính năng mô tả trong Silverlight Plug-in Object Reference. VI. MỘT SỐ VÍ DỤ VỀ SILVERLIGHT Ví dụ đầu tiên cho lập trình ứng dụng Silverlight. Chúng ta sẽ bắt đầu xây dựng chương trình Digg bằng cách chọn File->New trong VS2008 và dùng hộp thoại New Project để tạo một ứng dụng "Silverlight Application" (nhớ rằng bạn đã tải về và cài đặt Silverlight Tools for VS 2008 thì mới có mục này) Chúng ta sẽ đặt tên cho dự án này là "DiggSample". Khi nhấn vào nút OK, Visual Studio sẽ mở một hộp thoại nữa cho phép lựa chọn việc tạo chỉ một ứng dụng Silverlight, hay tạo thêm cả một ứng dụng ASP.NET vào Solution để chứa ứng dụng Silverlight bên SVTH: Thân Hoàng Lộc Trang 45 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH trong. Với ứng dụng này, chúng ta sẽ chọn để thêm một ứng dụng ASP.NET và đặt tên cho nó là "DiggSample_WebServer". Khi chúng ta nhấn OK, VS sẽ tạo một solution chứa cả hai ứng dụng Silverlight và ASP.NET. Khi thực hiện lệnh build, VS sẽ tự động sao chép ứng dụng Silverlight sang ứng dụng web của chúng ta. Ứng dụng web được tạo sẵn này sẽ có cả các trang ASP.NET và các trang HTML tĩnh, và chúng ta có thể dùng các trang này để test ứng dụng Silverlight. Ghi chú: Các ứng dụng Silverlight có thể được dùng bên trong bất kỳ web server nào (bao gồm cả Apache trên Linux) và được chứa bên trong các trang HTML tĩnh hay bất kỳ dạng trang web động nào (bao gồm cả PHP, Java, Ruby, Python...). Với ứng dụng Digg, chúng ta sẽ không dùng mã server-side nào, chúng ta sẽ dùng tính năng "cross-domain networking" của Silverlight để truy cập tập hàm của dịch vụ Digg một cách trực tiếp. Sở dĩ tôi tạo cả ứng dụng ASP.NET là vì muốn tận dụng tính năng triển khai tự động và dùng thử nó trong web server có sẵn khi phát triển ứng dụng ASP.NET với VS. - Có gì trong một ứng dụng Silverlight SVTH: Thân Hoàng Lộc Trang 46 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH Mặc nhiên, một ứng dụng Silverlight mới được tạo sẽ chứa hai file có tên Page.xaml và App.xaml, cũng như các file code behind tương ứng (được viết bằng VB, C#, Ruby hoặc Python). Các file XAML là các file ở dạng văn bản mà bạn dùng để khai báo các thành phần giao diện trong một ứng dụng Silverlight hay WPF. XAML cũng có thể được dùng cả trong việc khai báo các đối tượng .NET. File App.xaml được dùng để khai báo các tài nguyên, kiểu như các đối tượng brush hay style mà sẽ được dùng trong suốt toàn bộ ứng dụng. Lớp Application (code-behind của file App.xaml) có thể được dùng để xử lý các sự kiện ở cấp độ ứng dụng, như Application_Startup, Application_Exit và Application_UnhandledException. File Page.xaml mặc nhiên được dùng như thành phần giao diện mà nó sẽ được hiển thị khi ứng dụng được kích hoạt. Chúng ta có thể định nghĩa giao diện bên trong nó, và chúng ta cũng có thể xử lý các sự kiện gây ra bởi các thành phần giao diện này bên trong lớp code-behind của file Page.xaml. Khi chúng ta build ứng dụng DiggSample, Visual Studio sẽ mặc nhiên biên dịch các lệnh và các thẻ XAML vào một file assembly .NET, rồi đóng gói nó cùng với các tài nguyên tĩnh (như các file hình ảnh hay văn bản mà chúng ta muốn đóng gói cùng) vào SVTH: Thân Hoàng Lộc Trang 47 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH một file có tên DiggSample.xap: Các file ".xap" (đọc là zap) dùng thuật toán nén zip để tối thiểu hóa kích thước file. Một ứng dụng "Hello world" được viết trong .NET Silverlight (dùng VB hay C#) chỉ có kích thước 4KB. Ghi chú: Một số control trong bản Beta1 nếu được dùng sẽ phải được đóng góp kèm với ứng dụng, do vậy có thể sẽ làm tăng kích thước của file .xap. Chương trình Diggchỉ dùng các control trong bản Beta2 và phiên bản chính thức, do vậy kích thước tổng cộng sẽ chỉ khoảng 6-8KB. Để chạy một file Silverlight 2, bạn sẽ phải thêm thẻvào trong một file HTML (không cần dùng Javascript> Silverlight sẽ tự động download file .xap, khởi tạo nó và chạy nó trên nền của trình duyệt. Điều này cho phép việc chạy ứng dụng Silverlight không phụ thuộc trình duyệt (Safari, FireFox, IE, ...) và hệ điều hành (Windows, Mac, và Linux). Các file HTML và ASP.NET để test cũng được thêm vào sẵn ngay khi tạo project, do vậy chúng ta chỉ việc đơn giản là nhấn F5 để build, run và test. SVTH: Thân Hoàng Lộc Trang 48 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH - Cách thêm vào các control và bắt các sự kiện Hiện tại chương trình Digg của chúng ta vẫn chưa có gì, do vậy khi chạy nó các bạn sẽ chỉ thấy một trang web trống. Chúng ta có thể thay đổi bằng cách mở file Page.xaml và thêm vào một số nội dung: Chúng ta sẽ bắt đầu bằng việc thay đổi màu nền của grid và khai báo một nút bấm bên trong nó. Chúng ta cũng sẽ đặt vá trị cho thuộc tính "x:Name" của nút bấm thành "MyButton" - điều này sẽ cho phép có thể tham chiếu đến nút bấm này khi lập trình, chúng ta cũng sẽ đặt giá trị cho các thuộc tính Content, Width và Height: SVTH: Thân Hoàng Lộc Trang 49 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH Khi chạy, chương trình của chúng ta sẽ hiển thị ở giữa trang với một nút bấm có dòng chữ "Push Me" giống như sau: SVTH: Thân Hoàng Lộc Trang 50 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH Để thêm một "hành vi" cho nút bấm, chúng ta có thể thêm một hàm xử lý sự kiện "Click" cho nó, để thêm vào, chúng ta sẽ gõ vào tên sự kiện như sau: Ngay khi đó, VS sẽ nhắc chúng ta thêm hàm xử lý sự kiện vào lớp code-behind: Chúng ta có thể gõ vào tên của một phương thức mới mà chúng ta muốn tạo, hoặc chỉ đơn giản nhấn Enter để dùng luôn tên mặc nhiên của nó: SVTH: Thân Hoàng Lộc Trang 51 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH VS sẽ tự thêm vào một hàm xử lý sự kiện trong file code-behind. Chúng ta có thể dùng hàm này để cập nhật nội dung của nút bấm mỗi khi nhấn chuột lên nó: SVTH: Thân Hoàng Lộc Trang 52 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH Sau khi đã thay đổi giống như trên, chúng ta có thể chạy lại ứng dụng và nhấn lên nút bấm lần nữa, bây giờ nội dung của nó sẽ được cập nhật lại thành "Pushed!": SVTH: Thân Hoàng Lộc Trang 53 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 54 Nguyễn Anh Việt Lưu Xuân Việt Chương 2: XAML - EXTENSIBLE APPLICATION MARKUP LANGUAGE (Ngôn ngữ đánh dấu mở rộng) I. KHÁI NIỆM XAML 1. XAML là gì? XAML - Extensible Application Markup Language: là ngôn ngữ miêu tả. Bạn có thể tạo và nhìn thấy các phần tử giao diện người dùng (UI) bên trong việc khai báo XAML. Bạn cũng có thể sử dụng một file code-Behind tách biệt để đáp ứng những event và vận dụng đối tượng bạn khai báo trong XAML. Một ngôn ngữ khai báo nền XML rất trực quan cho việc tạo nên những giao diện từ những mẫu ban đầu tới sản xuất thực tế. Nhất là những người không có nền thiết kế và kỹ thuật web. File XAML được sinh ra từ file XML và có tên phần mở rộng là .xaml. Ví dụ: Trình bày bên trong một file Silverlight cơ bản xaml: <UserControl x:Class="MySilverlight.Page" xmlns="" xmlns:x=""> 2. XAML phân biệt dạng chữ (XAML Is Case-Sensitive) XAML là một ngôn ngữ phân biệt dạng chữ. Đây là điều khác biệt của XAML với nền XML, sự phân biệt chữ này bởi sự định nghĩa ngôn ngữ XML. Tên của phần tử XAML và thuộc tính phân biệt chữ. Giá trị của một thuộc tính là khả năng phân biệt chữ; Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 55 Nguyễn Anh Việt Lưu Xuân Việt Điều này sẽ phụ thuộc vào giá trị thuộc tính là như thế nào với handle thuộc tính chung. Chẳng hạn như, Nếu giá trị thuộc tính khai báo một bảng liệt kê các tên thành viên. Việc built-in các hành động mà biến đổi các kiểu một chuỗi tên thành viên rồi trả về giá trị của thành viên trong bảng liệt kê là không có sự phân biệt dạng chữ. Ngược lại, giá trị của thuộc tính Name tốt hơn những phương thức tiện ích trong sự làm việc với những đối tượng cơ bản trên cái tên mà đã khai báo thuộc tính Name, có sự phân biệt chữ trong chuỗi tên đó. II. CÚ PHÁP KHAI BÁO Trình bày đối tượng (Declaring Objects) Có hai cách trình bày đối tượng trong Silverlight: • Trực tiếp, khai báo cú pháp phần tử đối tượng: Sử dụng việc mở và đóng tag để khai báo một đối tượng như là một phần tử XML. Bạn có thể sử dụng cú pháp khai báo đối tượng root hoặc set các giá trị thuộc tính. • Gián tiếp, khai báo cú pháp thuộc tính: Sử dụng một giá trị bên trong để khai báo một đối tượng. Bạn có thể sử dụng cú pháp này để set giá trị của thuộc tính. Đây là một thao tác gián tiếp trong xử lý của XAML, bởi vì chỉ có một vài chuỗi bên dưới nhận biết làm thế nào để khởi tạo đối tượng mới trên cơ sở thuộc tính đang set và chuỗi giá trị cung cấp là gì. Tiêu biểu, điều này nghĩa là kiểu và thuộc tính trong vấn đề hỗ trợ việc chuyển đổi kiểu để có thể làm việc với những chuỗi nhập vào. Điều này không có nghĩa là bạn luôn có sự lựa chọn trong khai báo cú pháp phần tử đối tượng hoặc cú pháp thuộc tính nào. Tất nhiên những đối tượng chỉ có thể được khởi tạo khi khai báo cú pháp phần tử đối tượng. Một số ít các đối tượng chỉ có thể được tạo Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 56 Nguyễn Anh Việt Lưu Xuân Việt khi đã set các giá trị thuộc tính ban đầu. Đối tượng mà có thể được tạo với những phần tử đối tượng khác hoặc cú pháp thuộc tính là tương đối ít thấy trong Silverlight. 1. Khai báo một đối tượng bằng cách khai báo cú pháp phần tử đối tượng (Declaring an Object by Using Object Element Syntax) Để khai báo một đối tượng bằng cách khai báo cú pháp phần tử đối tượng, bạn viết bằng hai phần tử tag sau đây: objectName là tên của đối tượng bạn muốn thể hiện. Ví dụ: Cú pháp khai báo một đối tượng Canvas: Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 57 Nguyễn Anh Việt Lưu Xuân Việt Một sự tiện lợi là: nếu đối tượng không chứa những đối tượng khác, bạn có thể khai báo phần tử đối tượng bằng cách sử dụng một tag đóng thay vì một cặp tag mở/đóng, ví dụ như tag trong ví dụ sau: 2. Khai báo một đối tượng sử dụng cú pháp thuộc tính (Declaring an Object by Using Attribute Syntax) Trong một vài trường hợp, nơi mà chứa giá trị thuộc tính không nguyên thủy là một chuỗi, bạn có thể sử dụng cú pháp thuộc tính để khai báo kiểu đối tượng và set cả hai đặc tính cho đối tượng đó. Trong đó, có một đặc tính chính để định nghĩa đối tượng mới. Bởi vì những hành vi này thường trú trong thuộc tính của đối tượng. III. SETTING PROPERTIES Bạn có thể set các thuộc tính trên đối tượng mà bạn khai báo bằng cách sử dụng cú pháp phần tử đối tượng. Có nhiều cách để set các thuộc tính trong XAML: • Sử dụng cú pháp thuộc tính. • Sử dụng cú pháp phần tử đặc tính. • Sử dụng cú pháp phần tử nội dung. • Sử dụng một cú pháp tập hợp. Giống như việc khai báo một đối tượng, danh sách kỹ thuật này không đưa ra hay dựa vào việc set thuộc tính với bất kỳ kỹ thuật nào. Một vài thuộc tính chỉ có thể áp dụng duy nhất một kỹ thuật. Một vài thuộc tính lại có thể sử dụng kết hợp. Ví dụ như một thuộc Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 58 Nguyễn Anh Việt Lưu Xuân Việt tính mà những sự hỗ trợ cúp pháp phần tử nội dung cũng có thể được hỗ trợ cú pháp phần tử đặc tính hoặc cú pháp thuộc tính. Điều này phụ thuộc vào thuộc tính sử dụng là trên thuộc tính hay trên loại đối tượng. Cú pháp XAML được cung cấp bên trong phần "XAML Usage" của những trang tham chiếu cho mỗi thuộc tính có thể set trong XAML. Silverlight cũng có thuộc tính mà không thể set trong XAML nhưng có thể set khi khai báo code. Không có cánh nào để có thể set thuộc tính Read-only, kể cả trong XAML hoặc trong code trừ khi có một kỹ thuật thêm vào trong lúc phát. Có thể gọi một hàm khởi tạo bên ngoài và set nội dung thuộc tính muốn trình bày trong hàm đó. Một phương thức mà không hoàn toàn truy xuất thuộc tính, hoặc một quan hệ thuộc tính như là thuộc tính tính toán phải dựa vào giá trị thuộc tính trên bảng tính, có thể cộng thêm một dịch vụ hoặc một hành vi tác động trên giá trị thuộc tính đó. Ngoài ra, những tập hợp đưa ra sự xuất hiện mà bạn có thể set thuộc tính Read-only nhưng thực tế là không phải như vậy. 1. Khai báo cú pháp thuộc tính trong việc set một đặc tính (Setting a Property by Using Attribute Syntax) Sử dụng cú pháp sau: Hoặc: <!-- không đặt nội dung phần tử con ở đây nếu kiểu nội dung của phần tử không cho phép --> Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 59 Nguyễn Anh Việt Lưu Xuân Việt objectName: Tên đối tượng muốn trình bày. propertyName: Tên của thuộc tính muốn set cho đối tượng. propertyValue: Giá trị thuộc tính muốn set. Ví dụ: Khai báo một hình chữ nhật với chiều rộng 100pixel, chiều cao 100pixel, và màu viền là blue. 2. Khai báo cú pháp thuộc tính phần tử việc set một đặc tính (Setting a Property by Using Property Element Syntax) Để sử dụng cú pháp này, cần tạo những phần tử XML cho thuộc tính muốn set. Những phần tử này được đặt trong mẫu . Trong XML chuẩn, phần tử này chỉ là một phần tử miêu tả chỉ xảy ra khi có một chấm trong tên của nó. Ngoài ra, trong XAML dấu chấm trên tên của phần tử khai báo một thuộc tính của phần tử đó. Và thuộc tính này cũng là thuộc tính của đối tượng. Sử dụng cú pháp: propertyValueAsObjectElement Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 60 Nguyễn Anh Việt Lưu Xuân Việt : property là tên thuộc tính muốn set cho đối tượng. propertyValueAsObjectElement: khai báo một đối tượng mới với kiểu giá trị tùy thích . Ví dụ: 3. Khai báo cú pháp set đặc tính nội dung phần tử (Setting a Property by Using Content Element Syntax) Một vài đối tượng Silverlight xác định một thuộc tính mà cho phép một cú pháp XAML, nhờ đó bạn có thể bỏ qua tên thuộc tính và set thuộc tính một cách dễ dàng bởi sự cung cấp một giá trị bên trong những tab riêng chứa kiểu của phần tử đối tượng. Đây nghĩa là cú pháp phần tử nội dung. Nếu cú pháp phần tử nội dung là sẵn có, cú pháp này sẽ đưa ra bên trong phần sử dụng XAML cho thuộc tính bên trong Silverlight tham chiếu tới. Ví dụ: Trang thuộc tính Text cho TextBlock luân phiên đưa ra cú pháp XAML mà sử dụng cú pháp phần tử nội dung thay vì sử dụng cú pháp thuộc tính để set giá trị chuỗi Text. Set giá trị thuộc tính Text của TextBlock mà hoàn toàn không dùng thuộc tính Text. Trong trường hợp này, thuộc tính set là khai báo những gì bên trong nội dung XML hoặc “nội bộ text” hơn là khai báo những thuộc tính hoặc trình bày một phần tử đối tượng. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 61 Nguyễn Anh Việt Lưu Xuân Việt Hello! 4. Khai báo cú pháp tập hợp (Setting a Property by Using a Collection Syntax) Tập hợp là một trường hợp cần quan tâm trong XAML, bởi vì có vài biến đối trong cú pháp tập hợp. Vì vậy, khả năng đầu tiên trong XAML là coi việc set này như Read- only cho tập thuộc tính. Trong thực tế, XAML ở đây thêm những Item vào trong tập hợp. Thuộc tính của kiểu tập hợp luôn được lấy là thuộc tính tập hợp các Item. Thỉnh thoảng điều này luôn được bỏ qua từ cú pháp tập hợp XAML. Trong nhiều trường hợp, thuộc tính này được khai báo như là một chỉ mục CLR. Đối với những tập hợp, thuộc tính thực ra không phải là điều quan trọng để bất cứ cái gì là hữu ích với tập hợp từ XAML mà là việc thêm một phương thức. Như vậy, khi bắt gặp xử lý XAML một hoặc nhiều phần tử đối tượng bên trong một cú pháp tập hợp, mỗi đối tượng này như là được tạo ra đầu tiên, và mỗi đối tượng mới là việc thêm vào trong tập hợp điều này được gọi là phương thức thêm của tập hợp. Ví dụ: <!-- Here the GradientStopCollection tag is specified. --> Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 62 Nguyễn Anh Việt Lưu Xuân Việt Bên cạnh đó, trong sự tổng quát của một thuộc tính Silverlight mà nắm bắt một tập hợp, các phân tách XAML hoàn toàn biết kiểu nào là của tập hợp cơ bản trong thuộc tính tập hợp chứa đựng nó. Vì vậy, bạn có thể bỏ qua thuộc tính của đối tượng đối với chính tập hợp đó. Như ví dụ bên dưới: <!-- no explicit new GradientStopCollection, parser knows how to find or create --> Hơn nữa, có một thuộc tính được gọi là thuộc tính tập hợp, nhưng nó cũng chỉ nhận dạng như là một thuộc tính bên trong cho lớp đó. Trường hợp này với thuộc tính GradientStops sử dụng trong ví dụ trên. Vì vậy, bạn cũng có thể bỏ quên thuộc tính của đối tượng, kết quả tạo thành: Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 63 Nguyễn Anh Việt Lưu Xuân Việt Sự kết hợp này của tập hợp và cú pháp nội dung là sự phổ biến thường thấy trong những lớp mà sử dụng một cách tổng quát cho những cotrol kết hợp, chẳng hạn như những Panel. Ví dụ: Hello World Hello World 5. Khi nào thì sử dụng thuộc tính hoặc cú pháp đặc tính phần tử để set thuộc tính? (When to Use Attribute or Property Element Syntax to Set a Property ) Tất cả các đặc tính mà được hỗ trợ để Set trong XAML sẽ hỗ trợ các thuộc tính hoặc cú pháp đặc tính phần tử trong việc set trực tiếp các giá trị,. Nhưng có khả năng sẽ Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 64 Nguyễn Anh Việt Lưu Xuân Việt không hỗ trợ cho những cú pháp thay thế tương tự. Một vài thuộc tính không hỗ trợ cú pháp này, và một vài thuộc tính hỗ trợ thêm vào những cú pháp tùy chọn, chẳng hạn cú pháp nội dung phần tử để đưa ra đoạn text như ở trên. XAML hỗ trợ từng phần sẽ có những kiểu thuộc tính riêng trong cú pháp. Nếu kiểu của thuộc tính là kiểu nguyên thủy, chẳng hạn như: double, integer, hoặc string thì những cú pháp thuộc tính hỗ trợ cũng có kiểu như vậy. Ví dụ sử dung cú pháp thuộc tính để set độ rộng của hình chữ nhật. Thuộc tính độ rộng hỗ trợ cú pháp thuộc tính bởi vì giá trị thuộc tính này là double: Bạn cũng có thể sử dụng cú pháp thuộc tính để set một thuộc tính nếu kiểu đối tượng mà bạn sử dụng để set mà thuộc tính có thể được tạo ra bởi sự chuyển đổi thuộc tính một chuỗi. Bên cạnh đó, chắc chắn những kiểu của đối tượng khác cũng có thể được tạo bằng cách định nghĩa một chuỗi như là một giá trị thuộc tính (Thay vì phụ thuộc vào cú pháp phần tử đối tượng). Kỹ thuật này dựa trên cơ sở chuyển đổi kiểu, hỗ trợ nhiều cho những thuộc tính riêng hơn là thuộc tính chung trong những kiểu thuộc tính. Chuỗi giá trị của thuộc tính là từng phần và chuỗi thông tin là sử dụng set thuộc tính chủ yếu cho những đối tượng mới khởi tạo. Đôi khi, một kiểu chuyển đổi đặc biệt cũng có khả năng tạo những phân lớp khác nhau của những kiểu thuộc tính phổ biến, phụ thuộc vào thông tin xử lý duy nhất như thế nào trong chuỗi. Kiểu đối tượng mà hỗ trợ hành vi này sẽ có một danh sách ngữ pháp đặc biệt trên từng phần tài liệu cú pháp. Ví dụ sau sử dụng cú pháp thuộc tính set Fill của một hình chữ nhật. Thuộc tính Fill hỗ trợ một cú pháp thuộc tính khi bạn sử dụng SolidColorBrush để set nó. Bởi vì kiểu trừu tượng Brush đằng sau thuộc tính Fill hỗ trợ một kiểu chuyển đổi ngữ pháp mà có thể Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 65 Nguyễn Anh Việt Lưu Xuân Việt tạo ra một SolidColorBrush cùng lúc với thuộc tính. Trên lý thuyết chuỗi này là một Color: Bạn có thể sử dụng cú pháp phần tử thuộc tính để set một thuộc tính nếu đối tượng bạn sử dụng để set thuộc tính hỗ trợ cú pháp phần tử thuộc tính. Nếu đối tượng hỗ trợ cú pháp đối tượng thuộc tính đối tượng, thuộc tính cũng hỗ trợ cú pháp phần tử thuộc tính. Ví dụ sử dụng cú pháp thuộc tính phần tử để set Fill một hình chữ nhật. Thuộc tính Fill hỗ trợ cú pháp phần tử thuộc tính khi bạn sử dụng SolidColorBrush để set nó. Bởi vì SolidColorBrush hỗ trợ cú pháp phần tử đối tượng và đáp ứng yêu cầu thuộc tính với giá trị được set là một kiểu của Brush. Bởi vì kiểu chuyển đổi của Brush, SolidColorBrush xảy ra chỉ với trường hợp Brush nơi mà bạn có thể chọn cú pháp phần tử thuộc tính này hay cú pháp thuộc tính kia cho một giá trị Fill mới. Với những kiểu Brush khác bạn có thể sử dụng việc set Fill sử dụng một kiểu Brush như là ImageBrush . Bạn chỉ nên sử dụng cú pháp thuộc tính phần tử cho Fill và khai báo một ImageBrush như là một phần tử đối tượng cung cấp giá trị thuộc tính hoặc sử dụng tạo một phần mở rộng. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 66 Nguyễn Anh Việt Lưu Xuân Việt IV. THÀNH PHẦN MỞ RỘNG (Markup Extensions) Thành phần mở rộng là một khái niệm của ngôn ngữ XAML, thường được sử dụng trong sự thi hành của Silverlight XAML. Trong cú pháp thuộc tính của XAML, cặp dấu ngoặc ({ và }) thường dùng để chỉ phần mở rộng do XAML qui định. Cách sử dụng này giúp cho những xử lý của XAML tránh được những xử lý chung của giá trị thuộc tính cũng như là những chuỗi khác hoặc những giá trị chuỗi thường thay đổi. Thay vào đó, một kiểu phân tách gọi code diễn ra ngay sau phần mở rộng nhằm giúp cho việc khởi tạo một cây đối tượng. Silverlight hỗ trợ ba cách mở rộng đã được định nghĩa bên dưới Namespace XML và được hiểu ngầm trong phân tích cú pháp XAML. Bao gồm: Binding, StaticResource, và TemplateBinding. Binding hỗ trợ việc liên kết data. StaticResource hỗ trợ việc tham chiếu tài nguyên đã được khai báo trong một ResourceDictionary. TemplateBinding hỗ trợ những control Template trong XAML mà có thể tương tác với thuộc tính code của đối tượng Template. Silverlight cũng thi hành một sự mở rộng mà được khai báo bên trong Namespace XAML x:Null. Ví dụ: Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 67 Nguyễn Anh Việt Lưu Xuân Việt ... ... V. EVENTS XAML là một ngôn ngữ khai báo cho đối tượng và những thuộc tính của đối tượng, nhưng nó cũng bao gồm một cú pháp cho việc kèm theo những event handler tới đối tượng trong phần khởi tạo. Bạn có thể chỉ rõ tên event như là một tên thuộc tính trên đối tượng mà có event xảy ra. Với những giá trị thuộc tính, bạn có thể chỉ định rõ tên của những hàm event-handler mà bạn khai báo trong code. Xử lý XAML sử dụng tên này tạo một mô tả đại diện trong cây đối tượng tải lên và thêm những handler tới danh sách handler bên trong. Trong XAML, API thường sử dụng (managed hoặc JavaScript) ảnh hưởng tới kỹ thuật của chỉ định những event handler. API loại trừ lẫn nhau trên từng vi trí của trang XAML. Dấu hiệu cho mỗi API hiện hành là sự có mặt hay vắng mặt của x:lớp thuộc tính trên phần tử root của trang. Nếu x: lớp đã tồn tại, thì trang sử dụng managed API. Nếu x: lớp không tồn tại, trang sẽ sử dụng JavaScript API. Trong managed API, event handler chỉ tồn tại trong file code-behind mà kết hợp với trang XAML hiện tại. Bởi vì những lớp riêng này từ XAML và code thỉ tham gia vào trong việc thêm vào một handler. Ví dụ: event Loaded cho một Canvas: Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 68 Nguyễn Anh Việt Lưu Xuân Việt <Canvas xmlns= Loaded="onLoaded" /> Tên hàm onLoaded được khai báo bên trong file JavaScript. File JavaScript này kết hợp với HTML của trang chính thông qua tham số src của tag trong HTML. <!-- Reference the JavaScript file where the event functions are defined from the plug-in host HTML page. --> ... VI. XAML, EVENTS, và CODE-BEHIND Hầu hết ứng dụng nền Silverlight đều được sinh ra từ markup và code-behind. Trong một project, XAML dùng để viết như là một file .xaml và một ngôn ngữ CLR như là Visual Basic hoặc C# viết file code-behind . Khi một file XAML biên dịch, vị trí của file code-behind cho mỗi trang XAML được nhận ra bởi một Namespace và một lớp x:class thuộc tính của phần tử root của trang XAML. Ứng dụng chính – mức kỹ thuật cho việc thêm vào một hành vi cho phần tử đối tượng là sử dụng một event đã tồn tại của lớp, và viết một handle riêng triệu gọi event này khi xuất hiện trong thời gian thực thi. Tên event và tên của handler được sử dung theo kiểu đã được dựng trước, trong khi code thi hành những handler này đã được khai báo trong code-behind. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 69 Nguyễn Anh Việt Lưu Xuân Việt VII. NHỮNG PHẦN TỬ ROOT XAML VÀ xmlns (XAML Root Elements and xmlns) Một file XAML chỉ chứa một phần tử root. Ví dụ: trình bày một phần tử root của XAML đặc trưng cho trang Silverlight với phần tử root UserControl: <UserControl x:Class="MySilverlight.Page" xmlns="" xmlns:x=""> Phần tử root cũng chứa đựng thuộc tính xmlns và xmlns:x. Hai thuộc tính này cho biết bộ xử lý XAML mà Namespace XML nào chứa phần tử định nghĩa cho các phần tử mà nó tham chiếu tới. Thuộc tính xmlns trong ví dụ trên cho biết rõ Namespace XML mặc định. Trong Namespace XML mặc định, những phần tử đối tượng trong markup có thể đưa ra mà không được dự báo trước. Trong Silverlight, Namespace XML mặc định luôn luôn là Silverlight client namespace .lns:x thuộc tính trong ví dụ trên cho biết Namespace XML đã thêm vào. Bản đồ Namespace trong ngôn ngữ XAML . Thành phần ngôn Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 70 Nguyễn Anh Việt Lưu Xuân Việt ngữ khai báo bởi Namespace XAML bắt đầu bằng: x: khi tham chiếu trong markup của một file với bản đồ này. Cách sử dụng này của xmlns định nghĩa một phạm vi cho cách sử dụng và bản đồ thích hợp, được nêu rõ trong XML 1.0. Chú ý thuộc tính xmlns là duy nhất cần thiết trên phần tử root cho mỗi trang và xác định cho mỗi ứng dụng nếu nó được cung cấp trong markup. Định nghĩa xmlns áp dụng cho tất cả các phần tử con của root, và cũng áp dụng cho bất kỳ phần tử con trong những phần tử đã khai báo. Tuy nhiên, cách sử dụng này không phải là điểm mạnh trong Silverlight, bởi vì sự định nghĩa thường xuyên hoặc định nghĩa lại Namespace XML có thể đưa ra những kết quả đọc được khác nhau trong kiểu XAML markup. Để tùy chỉnh những assemblies riêng hoặc những assemblies bên ngoài Silverlight bạn có thể chỉ định rõ assembly như trong phần bản đồ Namespace XML. Tuy nhiên, bạn chọn một tiền tố khác và không phải giá trị mặc định như Namespace, nhưng nó cũng có một sự lựa chọn khác Namespace XML như là giá trị mặc định và khi đó nó vạch ra cho Silverlight một tiếp đầu ngữ. Tiếp đầu ngữ x: (The x: Prefix) Trong ví dụ phần tử root ở trên, tiếp đầu ngữ x: đã được sử dụng tới bản đồ Namespace XAML Tiếp đầu ngữ x: này sử dụng bản đồ Namespace XAML trong những Template cho project nền Silverlight, trong ví dụ và xuyên suốt tài liệu này. Tiếp đầu ngữ x:/ XAML Namespace chứa đựng vài cấu trúc lập trình mà bạn sẽ sử dụng khá thường xuyên trong XAML. Sau đây là x: prefix/XAML namespace trong khởi tạo lập trình phổ biến mà bạn sẽ sử dụng: • x:Key: set một khóa duy nhất cho mỗi tài nguyên trong ResourceDictionary. • x:Class: chỉ định rõ Namespace DLR và class name mà được tạo ra trong khi biên dịch backup. Bạn chỉ có một lớp hỗ trợ code-behind, hoặc hỗ trợ khởi tạo như là Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 71 Nguyễn Anh Việt Lưu Xuân Việt RootVisual, và nó đưa ra những lý do để bạn luôn thấy x:mapped ngang cấp nếu không có tài nguyên. • x:Name: Định rõ tên một đối tượng thực thi cho trường hợp tồn tại code thực thi sau khi một phần tử đối tượng khai báo trong XAML được xử lý. Bạn sử dung x:Name cho tên kịch bản thường xuyên gặp trong nhiều nơi thuận tiện thuộc tính FrameworkElement.Name không hỗ trợ như là trong storyboards Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 72 Nguyễn Anh Việt Lưu Xuân Việt Chương 3: CHI TIẾT MỘT SỐ THÀNH PHẦN NGÔN NGỮ TRONG THIẾT KẾ TRỰC QUAN I. SILVERLIGHT LAYOUT SYSTEM Layout System là gì? Thuật ngữ “Layout” mô tả kích thước và vị trí của những phần tử thành phần tập hợp con (Children) trong một Panel và vẽ chúng lên trên màn ảnh. Ở đây tập trung những tiến trình, những tập hợp con (Children) rộng lớn và mức độ xử lý quy mô. Sự phức tạp cũng dựa trên cơ sở những khai báo thể hiện ra bên ngoài bởi những tập hợp riêng và những phần tử Panel. Một liên tưởng đơn giản như Canvas có thể đưa ra những thực thi chính xác trong một Panel phức tạp nhưng Grid thì lại không đáp ứng được. Mỗi một thời điểm. các con (Children) trong UIElement thay đổi vị trí, nó có khả năng sinh ra thành công một tiến trình mới bởi hệ thống thể hiện. Đó là điều quan trọng để hiểu được các sự kiện có thể gọi hệ thống thể hiện, bởi vì những lệnh gọi không cần thiết có thể làm cho sự thực thi một trình ứng dụng trở nên nghèo nàn. Điều đơn giản, Layout là một hệ thống đệ quy mà các bước của nó là sự điều chỉnh vị trí, kích thước và cách thể hiện ra màn hình. Để xây dựng thành công một hệ thống Layout cần chú ý 2 điểm đối với mỗi thành phần tập hợp con (Children), thứ nhất là xác định phạm vi và thứ 2 là xác định cách bố trí. Phạm vi là vị trí đã được xác định rõ kích thước cho mỗi phần tử con. Cách bố trí phụ thuộc vào vị trí và kích thước của các phần tử con sau khi đã cân chỉnh. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 73 Nguyễn Anh Việt Lưu Xuân Việt 1. Cách thể hiện SilverLight trong hệ thống. - Vị trí và kích thước của trình nhúng (plug-in) Silverlight. Trình nhúng Silverlight xác định rõ khu vực mà trình ứng dụng Silverlight cơ bản thể hiện trên đó. Chúng ta có thể gắn kết trình nhúng này vào trang chủ HTML. Chúng ta cũng có thể chỉ định rõ một nơi nào đó trong trang HTML đang thể hiện hoặc chúng ta cũng có thể đưa toàn bộ trình nhúng này lên trên một trang HTML. Bởi vì chúng có hai cấu trúc tham chiếu tới vị trí đối tượng SilverLight. - Phạm vi trình nhúng: Vị trí thể hiện đối tượng của SilverLight chỉ trong phạm vi giới hạn của hộp thoại trình nhúng. - Phạm vi HTML: Toàn bộ trình nhúng và tất cả vị trí của các đối tượng trong trình nhúng phụ thuộc vào nơi mà chúng ta đặt trình nhúng trong HTML. - Việc thêm một trình nhúng SilverLight vào một trang web có hai cách: o Sử dụng HTML: Tất cả những phần tử đối tượng chúng ta cho phép nhúng và định hình rõ trình nhúng SilverLight ( SilverLight plug-in) trong trang HTML, vạch ra hướng mà có sự tương thích với tất cả sự hỗ trợ của người dùng. Chủ đề này mô tả làm thế nào chúng ta hoàn tất, phổ biến những yêu cầu tiếp theo sử dụng những phần tử đối tượng: ƒ Nhúng một SilverLight và chỉ định rõ ứng dụng trên trang chủ. ƒ Định rõ việc luân phiên việc trình bày bằng HTML khi SilverLight không cài đặt được. Trong trang HTML các thao tác này hoàn toàn khác, cái khác biệt rõ ràng nhất là cách cấu hình tham số truyền của các phần tử đối tượng. Theo những procedure mô tả trong một trình độc lập nhưng chỉ xây dựng hoàn tất một trình duyệt đa nhiệm HTML ví dụ ở cuối chương này. Chúng ta nên sử dụng kết quả của những ví dụ này như là một mẫu (Template) cho project thay vì sử dụng những phần con trong mỗi procedure. Kết Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 74 Nguyễn Anh Việt Lưu Xuân Việt quả của những ví dụ này cũng đảm bảo sự tương thích giữa các trình duyệt với nhau và cũng là cơ sở trong các mẫu (Template) mà Visual Studio và Expression Blend sử dụng để kiểm tra những trang đã sinh ra. 2. Đối tượng tham chiếu trong trình nhúng (plug-in) Silverlight. Trình nhúng Silverlight là một đối tượng mà có thể sử dụng những kiểu lập trình và truy xuất dữ liệu khác nhau. Những thành phần của lớp Plug-in có thể được truy xuất thông qua phương thức HTML DOM và thông qua những phần tử đối tượng đã được định nghĩa trên nền Silverlight plug-in trong một trang HTML. Tương tự những hàm cũng được truy xuất thông qua APIs mà đưa ra trang HTML dạng xuất ra như đối tượng những thẻ. Cũng giống như trong ASP.NET, Silverlight và những trình nhúng Silverlight được điều khiển trên trang Web máy chủ và những hàm trong thư viện Silverlight.js. Một vài hàm trong trình nhúng Silverlight có thể được truy xuất trong quá trình chạy (Run-time) bởi chúng được sử dụng trong những mô hình lập trình Silverlight (the JavaScript API or managed code). - Sử dụng JavaScrip: Cách khác, chúng ta cũng có thể khai báo những đối tượng sử dụng thông qua những hàm mà JavaScrip cung cấp trong file Silverlight.js. Những hàm này tạo ra đối tượng cơ bản và cung cấp như là những tiện nghi trong sự trình bày của JavaScrip. o Silverlight.js là một file hướng dẫn được cung cấp trong Silverlight SDK. Ta có thể gọi các hàm createObject và createObjectEx khai báo file này khi nhúng Silverlight Plug-in vào trang web. Gọi chung những hàm này là hàm nhúng. o Những hàm nhúng này cho phép cấu hình chi tiết những tham số vào và sinh ra những đối tượng HTML. Kỹ thuật nhúng này tương thích với tất cả sự hỗ trợ các trình duyệt. Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 75 Nguyễn Anh Việt Lưu Xuân Việt - Các hàm nhúng này cung cấp thêm các lợi ích sử dụng các đối tượng ngay khi: o Chúng cho phép ta cấu hình một trương trình Silverlight plug-in khi ta nhúng vào, hoặc trừu tượng hóa chi tiết một cấu hình độc lập, một hàm dùng chung. o Chúng vẫn tương thích ngược lại với các hàm createObject và createObjectEx trong Silverlight 1.0. o Mỗi Plug-in nhúng vào có một nét riêng cho phép ta nhận dạng chúng. Điều này rất hữu ích khi nhúng nhiều Plug-in vào một trang web đơn. 3. The Layout Containers Một cửa sổ Silverlight chỉ có thể chứa duy nhất một phần tử đơn lẻ. Để chứa nhiều hơn một phần tử và tạo ra nhiều giao diện người dùng thực tế. Bạn cần phải có một chỗ chứa trên một trang và sau đó thêm những phần tử ấy vào chỗ chứa này. Giao diện này đã được định rõ bởi khuôn chứa bạn đã sử dụng. Tất cả những Layout Container là những bảng có nguồn gốc từ lớp trừu tượng System.Windows.Controls.Panel Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH Hình 1: Bảng phân cấp lớp Panel Lớp Panel thêm vào 2 thuộc tính chung là: Background và Children. Background là bộ bút vẽ sử dụng để sơn màu nền của Panel. Children là tập hợp những mục mà lưu trữ trên Panel. Đây là mức thứ nhất của các phần tử - Trong một phát biểu khác, bản thân những phần tử này cũng có thể chứa đựng nhiều phần tử khác. Nói riêng, lớp Panel không chỉ là một lớp cơ bản mà còn là một điểm bắt đầu cho nhiều lớp chuyên dụng khác. Để thuận tiện trong việc sắp đặt layout, Silverlight cung cấp 3 loại Panel như hinh 2. Cũng giống như hầu hết các trình điều khiển trong Silverlight và nhất là những phần tử trực quan. Những lớp này cũng được xây dựng trên System.Windows.Controls namespace. Tên Mô tả StackPanel Nơi những phần tử được xếp thành hàng ngang hay hàng dọc. Bao chứa SVTH: Thân Hoàng Lộc Trang 76 Nguyễn Anh Việt Lưu Xuân Việt Báo cáo đồ án tốt nghiệp GVHD: TS. NGUYỄN CHÁNH THÀNH SVTH: Thân Hoàng Lộc Trang 77 Nguyễn Anh Việt Lưu Xuân Việt Layout này chia những thành phần lớn, những trang phức tạp thành những phần nhỏ tiêu biểu thưởng sử dụng. Grid Sắp xếp các phần tử trong hàng và cột tùy theo sự ẩn hiện của bảng. Đây là một tính mềm dẻo nhất và thường sử dụng với những bao chứa Layout. Canvas Cho phép những phần tử có một vị trí tuyệt đối sử dụng hệ tọa độ cố định. Bao chứa Layout này là một bao chứa đơn nhưng nó có tính mềm dẻo. Những bao chứa Layout có thể xếp chồng nhau. Một giao diện người dùng điển hình bắt đầu với Grid, Silverlight hoàn toàn có khả năng sinh ra bao chứa, và chứa đựng những bao chứa Layout khác mà đã nhóm nhỏ và sắp xếp những phần tử lại. Chẳng hạn như: một TextBoxes tiêu đề, những Item trong List, những Icon trên ToolBar và v…v… a. StackPanel: Sắp xếp các phần tử con theo một đường thẳng đơn theo hướng ngang hoặc dọc. Mặc định của giá trị HorizontalAlignment và VerticalAlignment là trạng thái Stretch. Giá trị mặc định của thuộc tính Orientation là dọc (Vertical). Các sự kiện của StackPanel: Ngoài các sự kiện

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

  • pdfNGHIEN CUU SILVERLIGHT VA XAY DUNG UNG DUNG WEB HO TRO PHAT TRIEN BAI GIANG DANG MULTIMEDIA.pdf