Thứ ba, ngày 21 tháng 11 năm 2017

WPF – Cơ bản về XAML trong WPF 4 – Part 2 of 2

Ngày đăng: 11/3/2012, 1:48:53PM | Lượt xem: 2,530
Hot!

[…] XAML (eXtensible Application Markup Language) là một ngôn ngữ  đánh dấu với cú pháp tương tự XML dùng để tạo các đối tượng .Net trong các ứng dụng WPF, Silverlight và WF. Mặc dù đây là những mảng đề tài lớn nhưng nếu bạn đã biết đến XML, sẽ không khó để làm quen với XAML. Trong bài này tôi sẽ trình bày các đặc điểm và chức năng cơ bản của XAML để giúp bạn tiếp cận với WPF từ mức đơn giản nhất. Nền tảng mà tôi sử dụng là .Net framework 4 cùng với C# 2010.[...]

 

[…] XAML (eXtensible Application Markup Language) là một ngôn ngữ  đánh dấu với cú pháp tương tự XML dùng để tạo các đối tượng .Net trong các ứng dụng WPF, Silverlight và WF. Mặc dù đây là những mảng đề tài lớn nhưng nếu bạn đã biết đến XML, sẽ không khó để làm quen với XAML. Trong bài này tôi sẽ trình bày các đặc điểm và chức năng cơ bản của XAML để giúp bạn tiếp cận với WPF từ mức đơn giản nhất. Nền tảng mà tôi sử dụng là .Net framework 4 cùng với C# 2010.[...]

 

WPF – Cơ bản về XAML trong WPF 4 (Part 1 of 2)

Đặt tên cho các phần tử

Một điểm khác biệt khi dùng code-behind và XAML là các control được tạo từ các thẻ trong XAML không được khai báo và gán vào một biến cụ thể. Chính vì thế phải có một phương pháp để đặt định danh cho mỗi phần tử để có thể truy xuất đến chúng trong code-behind.

Sử dụng property Name của FrameworkElement

Trong WPF, các control được thừa kế từ lớp FrameworkElement:

Lớp FrameworkElement chứa property Name và được khai báo dạng sau:

[RuntimeNameProperty("Name")]

 public class FrameworkElement : UIElement, IFrameworkInputElement, IInputElement, …

{

             public string Name;

}

Attribute [RuntimeNameProperty] có tác dụng chỉ ra property nào được xem là tên của instance được tạo ra dựa trên lớp này và các lớp con của nó.

Ví dụ bạn định nghĩa một Button như sau trong XAML:

<Button Name=”button1″ />

Khi đó một field với tên là “button1” sẽ được thêm vào trong code-behind tương ứng với tài liệu XAML hiện tại:

internal System.Windows.Controls.Button button1;

Và bạn có thể dùng tên “button1” để truy xuất trong code-behind.

MessageBox.Show(button1.Name);

Sử dụng x:Name

Đối với các thành phần không sử dụng property Name như cách trên để đặt tên, bạn có thể dùng x:Name để đặt tên tương tự như với property Name.

Định nghĩa trong XAML button1 với sự kiện Button_Click:

<Button x:Name=”button1″ Foreground=”Aqua” Click=”Button_Click”>Click Me!</Button>

Hiển thị nội dung của button1 trong code-behind C#:

private void Button_Click(object sender, RoutedEventArgs e)

{

    MessageBox.Show(button1.Content.ToString());

}

Các phần tử lồng nhau

Như bạn thấy các phần tử trong XAML có thể lồng nhau, tuy nhiên không phải bất kì kiểu phần tử nào cũng có thể đặt lồng trong phần tử khác. Chẳng hạn như với TextBox, bạn chỉ có thể đặt văn bản, còn với Button bạn có thể đặt bất kì thứ phần tử nào.

Khảo sát hai lớp này, ta có thể phát hiện được nguyên nhân của sự khác biệt này:

[ContentProperty("Text")]
public class TextBox: TextBoxBase

{

public string Text;

}

Lớp Button được kế thừa gián tiếp từ ContentControl:

Phần định nghĩa ContentControl có dạng:

[ContentProperty("Content")]
public class ContentControl : Control

{

            public object Content;

}

Attribute [ContentProperty] có tác dụng chỉ ra property nào sẽ được dùng để chứa các phần tử được lồng bên trong. Và như định nghĩa thì Button và TextBox chỉ có thể chứa được một phần tử. Đối với một số Control khác, property được sử dụng có thể là một collection để chứa  được nhiều phần tử bên trong. Chẳng hạn như lớp Panel chứa tập hợp các phần tử có kiểu UIElement là lớp cha của FrameworkElement:

[ContentProperty("Children")]
public abstract class Panel : FrameworkElement, IAddChild
{

public UIElementCollection Children;

}

Lớp Window, được thừa kế từ ContentControl, cũng chỉ có thể chứa duy nhất một phần tử lồng bên trong. Vì thế khi thiết kế cửa sổ mới, một thẻ Grid sẽ được tự động thêm thêm vào làm phần tử con của Window để chứa tất cả những thành phần mà bạn cần thêm vào.

Phần kết

Các nội dung được trình bày trong hai phần của bài viết này chưa bao quát hết được những đặc điểm và chức năng của XAML trong WPF. Tôi sẽ dành phần chi tiết hơn trong từng bài viết riêng để bạn có thể tham khảo khi cần thiết. Một số link tham khảo trên MSDN mà bạn có thể thấy hữu ích để biết thêm thông tin:

Windows Presentation Foundation

XAML Overview (WPF)
Understanding XML Namespaces

 Chia sẻ qua: 
Hot!
Ý kiến bạn đọc

These items will be permanently deleted and cannot be recovered. Are you sure?

Gallery

image

Maecenas viverra rutrum pulvinar

Maecenas viverra rutrum pulvinar! Aenean vehicula nulla sit amet metus aliquam et malesuada risus aliquet. Vestibulum rhoncus, dolor sit amet venenatis porta, metus purus sagittis nisl, sodales volutpat elit lorem…

Read more

Text Links

Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
ca do bong da online
Copyright © 2011 - 2012 vietshare.vn by phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.