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. 
                
              
                                            
                                
            
 
            
                 140 trang
140 trang | 
Chia sẻ: netpro | Lượt xem: 1999 | Lượt tải: 1 
              
            Bạn đang xem trước 20 trang tài liệu Đề tài Nghiên cứu Silversight và xây dựng ứng dụng web hỗ trợ phát triển bài giảng dạng Multimedia, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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
            Các file đính kèm theo tài liệu này:
 Nghiên cứu Silversight và xây dựng ứng dụng web hỗ trợ phát triển bài giảng dạng Multimedia.pdf Nghiên cứu Silversight và xây dựng ứng dụng web hỗ trợ phát triển bài giảng dạng Multimedia.pdf