Bookmarks rất có ích trong các trang web, bởi vì chúng cho phép người ta có thể trực tiếp quay trở lại một section( một phiên làm việc, một lần truy cập) của trang web mà họ đã truy cập trước đó. Bài hướng dẫn này sẽ trình bày cho bạn biết làm cách nào để áp dụng và sử dụng bookmarks trong những ứng dụng Silverlight.
Thí dụ, nếu người sử dụng đánh vào dòng liên kết này http://www.MySilverlightApp.com/default.aspx#Page2 bạn sẽ ngăn việc này từ thanh địa chỉ và hiển thị trang thứ hai của ứng dụng.
Đối với demo của chúng ta, với mục đích đơn giản, chúng ta sẽ chỉ tạo
mỗi trang một phần tử Canvas với một
TextBlock. Ý tưởng là bạn làm cho mỗi
trang của bạn một UserControl của riêng
nó. Tôi đã tạo hai trang : Page 1 và Page 2.
Page.xaml:
<UserControl x:Class="SilverlightApplication14.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<Canvas>
<Canvas x:Name="Page1">
<TextBlock>Hello there this is page 1</TextBlock>
</Canvas>
<Canvas x:Name="Page2" Visibility="Collapsed">
<TextBlock>Hello there this is page 2</TextBlock>
</Canvas>
</Canvas>
</UserControl>
Trong hàm khởi tạo của class Page.xaml.cs chúng ta gọi hàm ProcessBookmark(). Thủ tục này sẽ tạo ra các chuỗi địa chỉ trong bookmark từ thanh địa chỉ bằng cách gọi HtmlPage.Window.CurrentBookmark; Mỗi lần chúng ta muốn đánh dấu trang thì chúng ta có thể gán Visiblity của Canvas mà chúng ta muốn hiển thị là Visible. Chú ý là chúng ta cũng có thể đánh dấu trang cho thanh tiêu đề của trình duyệt window bằng cách gọi HtmlPage.Document.SetProperty("title", _page1Title);
public partial class Page : UserControl
{
const string _page1Title = "My Silverlight App - Page 1";
const string _page2Title = "My Silverlight App - Page 2";
public Page()
{
InitializeComponent();
ProcessBookmark();
}
private void ProcessBookmark()
{
string bookMark = HtmlPage.Window.CurrentBookmark;
switch (bookMark)
{
case "Page1":
HtmlPage.Document.SetProperty("title", _page1Title);
Page1.Visibility = Visibility.Visible;
Page2.Visibility = Visibility.Collapsed;
break;
case "Page2":
HtmlPage.Document.SetProperty("title", _page2Title);
Page1.Visibility = Visibility.Collapsed;
Page2.Visibility = Visibility.Visible;
break;
}
}
}
Vậy nếu bạn muốn cài một thanh địa chỉ vào một bookmark (có nghĩa là lưu lại địa chỉ trang web)? Bạn có thể thay đổi chuỗi kí tự trong thanh địa chỉ của trình duyệt của bạn bằng cách gọi như sau: HtmlPage.Window.Eval("window.location.hash='Page1'");
Cụ thể hơn:
1: private void SetBookmark(string bookmark)
2: {
3: HtmlPage.Window.Eval("window.location.hash='"+bookmark+"'");
4: }
Hiện tại nếu bạn nhấn nút Back để quay lại trong trình duyệt của bạn, nó sẽ đẩy bạn ra khỏi ứng dụng Silverlight của bạn. Tôi đang tìm kiếm cách để chặn nút Back và nút Forward trong trình duyệt của bạn, để ta có thể tạo một danh sách nội bộ các bookmark (history of bookmarks) cho ứng dụng Silverlight của chúng ta. Nếu bạn nào có những tài nguyên / kĩ thuật tốt về điều này, hãy cho tôi biết và tôi sẽ trình bày trên blog này.
Thank you,
--Mike Snow