Wiki


Wiki Table of Contents

Page Details

Published by:
This page has not yet been rated

Silverlight Tip of the Day #101 – Silverlight 3 Beta 1 Feature Summary

Unless you have had your head under a rock you probably have heard Silverlight 3 Beta 1 has been released! Nếu bạn chưa có, hãy install nó từ đây http://silverlight.net/getstarted/silverlight3/default.aspx

Phiên bản này được đóng gói kèm theo một số các chức năng tuyệt nhất từ trước đến nay. Nếu bạn là một nhà lập trình phát triển game, bạn sẽ vui mừng khi nghe các chức năng bên dưới đây bây giờ đã có trong Silverlight 3. Tôi sẽ và đang viết các chi tiết về số các chức năng này trên blog để giúp bạn áp dụng chúng trong các ứng dụng của bạn.

Image Opened

Trong Silverlight 2 rất khó để xác định một cách chính xác khi nào một image được mở hoàn toàn. Trường hợp này thường cần đến để xác định kích thước thực tế của image. Vấn đề đó xảy ra vì DownloadProgress được khởi động 100% trước khi image được hoàn toàn decoded(giải mã). Để giải quyết vấn đề này, một event mới được gọi là ImageOpened đã xuất hiện trong Silverlight 3. Bây giờ đảm bảo bạn có thể có được kích thước phù hợp của image. Thí dụ:

private void LoadImage(string fileName)
{
    Image img = new Image();
    Uri uri = new Uri(fileName, UriKind.Relative);
    img.Source = new System.Windows.Media.Imaging.BitmapImage(uri);
    img.ImageOpened += new EventHandler<RoutedEventArgs>(Image_ImageOpened);
}
 
void Image_ImageOpened(object sender, RoutedEventArgs e)
{
    Image img = (Image)sender;
    BitmapImage bi = (BitmapImage)img.Source;
    double width = bi.PixelWidth;
    double height = bi.PixelWidth != _radius)
}

XAP Compression

Sự tối ưu hóa được thực hiện để giảm thiểu kích thước của các file XAP. Bạn có thể hi vọng là kích thước của file XAP bây giờ có thể ngang bằng (nếu không tốt hơn) Windows zipping. Các game thường được đóng gói kèm với rất nhiều nội dung vì vậy rõ ràng là nếu kích thước file XAP của bạn càng nhỏ thì các khách hàng của bạn sẽ có thể download các game của bạn càng nhanh.

Perspective 3D

Perspective 3D transforms bây giờ có thể được áp dụng trong các Silverlight controls dựa vào thuộc tính PlaneProjection property. Điều này cho phép bạn rotate  một  2D control trong một 3D plane.

image

Đoạn code ví dụ này sẽ trình bày cách thức để thực hiện được điều đó:

<Image Source="Man.png">
    <Image.Projection>
        <PlaneProjection RotationX="45"></PlaneProjection>
    </Image.Projection>
</Image>

Pixel Shaders 

Pixel shaders cho phép bạn áp dụng các hiệu ứng(effect) để kiểm soát như là các images. Có hai hiệu ứng mặc định có sẵn là: Drop Shadow và Blur. Ngoài ra, bạn có thể sáng tạo và áp dụng các hiệu ứng tùy chỉnh của riêng bạn.

Các image sau hiển thị kết quả của việc áp dụng hiệu ứng pixel shader effects trên nó:image

Đây là đoạn code ví dụ  để thực hiện việc này thông qua một built trong shader:

<Image Source="dwarf.jpg">
    <Image.Effect>
        <BlurEffect></BlurEffect>
    </Image.Effect>
</Image>

Binding 

Bây giờ bạn có thể bind các control để  kết nối đến các cái khác. Thí dụ, Text của một TextBlock có thể bind đến Text của một TextBox. Hoặc là, một TextBox Text có thể bind đến một Value of Slider. Thí dụ:

<StackPanel>
    <TextBox x:Name="UserText"></TextBox>            
    <TextBlock Text="{Binding Text, ElementName=UserText}"></TextBlock>
</StackPanel>

Bất cứ loại nào trong TextBox cũng tự động được tham chiếu(reflected) trong TextBlock.

 

Bitmap API

Bitmap APIs bây giờ đã sẵn sàng được sử dụng thông qua một class gọi là  WriteableBitmap. Phương thức này có các tham số như là surface width và height và định dạng pixel.

Đoạn code thí dụ:

WriteableBitmap wb = new WriteableBitmap(0, 0, PixelFormats.Bgr32);
wb.Render(img, new ScaleTransform());
wb.Lock();
// walk through WriteableBitmap[]
wb.Invalidate();
wb.Unlock();

 

Hardware Acceleration

Silverlight bây giờ làm cho việc sử dụng GPU (Graphics Processing Unit) cho rendering mà giải phóng thời gian rảnh rỗi của CPU cho các task khác. Các GPU thường được đặt trên một video card. Nó là một thiết bị xử lý đồ họa chuyên dụng được sử dụng cho một loạt các nhiệm vụ như là tính toán hoạt động của các dấu chấm động .

Animated Text Performance Improvements

Một thuộc tính gọi là TextRenderingMode bây giờ đã cho phép bạn xác định RenderForAnimation. Điều này turns off sự tối ưu hóa(optimization) mà có thể ảnh hưởng trực tiếp đến các text animation như là scaling, rotating, vv.... Kết quả là một smother, thực thi các sự chuyển động của text nhiều hơn. Thí dụ về cách thức gán thuộc tính này như sau:

RenderOptions.SetTextRenderingMode(MyTextbox, TextRenderingMode.RenderForAnimation);

Network Monitoring API

Bây giờ đã có API’s cho phép bạn kiểm soát tình trạng  network. Để xem một mạng lưới hiện đang có sẵn hay không, bạn có thể gọi:

bool isConnected = NetworkInterface.GetIsNetworkAvailable();

Bạn cũng có thể gắn thêm một event sẽ khởi động khi network status thay đổi:

NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);

Để kết nối đến các phương thức này, bạn sẽ cần reference đến namespace System.Net.NetworkInformation;

SaveFileDialog

Cuối cùng chúng ta đã có thể save các file trong Silverlight! Thực hiện gọi phương thức này sẽ dẫn ra một hộp thoại dialog cho phép bạn xác định một file để save. Phương thức này trả về một con trỏ(pointer) trỏ đến một Stream mà bạn có thể write và hơn thế nữa ở trên đó. Đoạn code thí dụ:

SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "map files (*.xml)|*.xml|All files (*.*)|*.*";
sfd.ShowDialog();
System.IO.Stream stream = sfd.OpenFile();
 
// Save your data here
 
stream.Flush();
stream.Close();

Hãy chắc là để flush và close stream hoặc là file sẽ không được tạo.

CaretBrush

 CaretBrush rất có ích vì bạn bây giờ có thể thay đổi sự xuất hiện của caret(dấu nháy viết). Đây sẽ là một vấn đề nếu, thí dụ, bạn muốn có một màu background color của một textbox được gán . Thế là dấu nháy trỏ đen(cursor)  cùng màu đen sẽ không xuất hiện.  Đây là thí dụ làm sao để đổi màu của dấu nháy:

<TextBox Foreground="White" Background="Black" Width="200" Text="Hello">
    <TextBox.CaretBrush>
        <SolidColorBrush Color="White"></SolidColorBrush>
    </TextBox.CaretBrush>
</TextBox>

Kết quả của Screenshot (hãy chú ý đến dấu nháy trắng(white caret)):

image

Local Connection

Tính năng này cho phép hai ứng dụng Silverlight riêng biệt giao tiếp với từng cái khác trên client side mà không cần làm một vòng đến server.

Thực thi tính năng này khá dễ dàng. Bắt đầu bằng việc khởi tạo hai ứng dụng Silverlight riêng biệt. Với mỗi cái, hãy thêm đoạn code này để lắng nghe( listen) cho một message:

LocalMessageReceiver receiver = new LocalMessageReceiver("R2D2");
receiver.MessageReceived += new EventHandler<MessageReceivedEventArgs>(receiver_MessageReceived);
receiver.Listen();

Bạn sẽ cần để tham chiếu (reference) đến System.Windows.Messaging để thực hiện các cuộc gọi này. Hàm khởi tạo cho LocalMessageReceiver mang một định danh duy nhất.

Với ứng dụng khác thêm đoạn code này sẽ gửi một message đến ứng dụng Silverlight đầu tiên:

LocalMessageSender sender = new LocalMessageSender("R2D2");
sender.SendCompleted += new EventHandler<SendCompletedEventArgs>(sender_SendCompleted);
sender.SendAsync("Hello World!");

 

Navigation

Navigation bây giờ đã được hỗ trợ trong Silverlight. Điều này cho phép bạn làm một số việc như là nối navigation trong ứng dụng Silverlight của bạn vào các button Back và Forward của browser của bạn. Một template mới được gọi là “Silverlight Navigation Application” có sẵn để minh họa bằng cách nào để thực hiện điều này.

Về cơ bản để thực hiện điều này bạn sẽ cần đặt main page của bạn vào trong một thẻ <navigation:Frame>. Bạn thêm history bằng cách gọi cái này:

this.Frame.Navigate(new Uri(currentPage, UriKind.Relative));

Sau đó, khi các back và forward buttons của  browse của bạn được click thì frame object này sẽ  chặn chúng và hiển thị trang đúng.

System Colors

Bây giờ bạn có thể truy cập đến một user thiết lập cho System Colors của họ. Những thuộc tính này có sẵn trong System.Windows.SystemColors.*. Thí dụ: System.Windows.SystemColors.ActiveBorderColor. Điều này sẽ cho phép bạn  đặt một sự đối chiếu cho phù hợp với một user's settings.

Other

  1. Out of Browser Experience – Cho phép bạn run ứng dụng Silverlight như là một desktop application.
  2. Assembly Caching – Enables non-core runtime extensions to be cached.
  3. ManagedResourceDictionary – Quản lý resources files trong các separate files.
  4. New controls – Một số các controls mới đã được thêm vào.
  5. H.264 / AAC Media Playback - Hỗ trợ định dạng Media mới.
  6. Animation Easing Effects - Hỗ trợ thêm các hiệu ứng hình ảnh gồm cả smoother transitions.
  7. Media Logging - Cho phép bạn thu gom dữ liệu về một customer và các  meda experience của họ. Dự liệu được gửi lại cho một hay nhiều servers để phân tích.
  8. Thanks,

    --Mike Snow


Recent Comments

Leave the first comment for this page.