Blog chia sẽ kinh nghiệm lập trình và Technical VN. Nơi mà các bạn có thể học tập và tham khảo về những công nghệ mới nhất hiện nay về .NET
Thứ Ba, 28 tháng 4, 2015
On 04:12 by Tuan Pham in WPF-nangcao No comments
Trong bài viết trước tôi có giới thiệu về Extension Methods trong nguôn ngữ lập trình C#; hôm nay tôi sẽ nói về một vấn đề có ý nghĩa tương tự nhưng lại chuyên biệt cho ứng dụng WPF. Ngoài ra các bạn cũng có thể thấy rằng trong WPF chúng ta có thể Attach khá nhiều thứ ví dụ như Property, đó là điểm mạnh của WPF mà Winform muốn làm được cũng khó.
I> Attached Behaviors là gì?
Tôi sẽ không định nghĩa suông về Attached Behaviors mà tôi sẽ nêu ra tình huống mà chúng ta sẽ phải dùng đến Attached Behaviors, nhưng nôm na chúng ta có thể hiểu Attached Behaviors là việc bạn thêm một hành vi vào một đối tượng Control nào đó mà bản thân nó trước đó không có - bạn sẽ nghĩ đến việc viết một control mới và thêm Behaviors nhưng thật sự không cần thiết khi mà chúng ta có thể đơn giản vấn đề hơn, ngoài ra với mô hình MVVM thì việc viết một control mới và thêm Behaviors thì có khá nhiều vấn đề nảy sinh(các sự kiện về chuột, key..). Tình huống khác đó là Behaviors này cần cho một số các Control khác nhau, vậy Attached tốt hơn hay viết lại hết tất cả các control tốt hơn chưa kể việc bạn sẽ phải thay thế lại hết tất cả các control nếu đã xây dựng trước đó.

Attached Behaviors không can thiệp quá sâu vào hành vi ứng xử của Control, không làm mất đi tính hướng đối tượng
Chú ý: khi bạn gặp khó khăn trong việc xử lý sự kiện chuột, phím... đối với mô hình MVVM bạn nên cân nhắc việc dùng Attached Behaviors; Trong bộ công cụ Expression Blend bạn cũng có sẵn khá nhiều Attached Behaviors để dùng
II> Cách dùng Attached Behaviors
Trước tiên để có thể sử dụng được chúng ta cần tải về bộ thư viện hỗ trợ Attached Behaviors sau về và Reference:
Sau đó tôi sẽ tạo một lớp DragMoveBehavior là Implament của Behavior<UIElement> . Mục đích lớp này là thêm tính năng DragMove cho các đối tượng là UIElement - nghĩa là khi tôi giữ chuột TRÁI và kéo thì Form/Window chứa UIElement đó sẽ di chuyển theo(UIElement là một thẻ bất kỳ có chức năng UI).
MainWindow.cs
#region
using System.Windows;
using System.Windows.Interactivity;
#endregion
namespace Attach_Behaviors
{
internal class DragMoveBehavior : Behavior
{
protected override void OnAttached()
{
base.OnAttached();
// Lấy ra Windows đang chứa đối tượng bị tác người dùng động
// Đối tượng bị tác người dùng động chính là AssociatedObject
Window parentwindow = Window.GetWindow(AssociatedObject);
AssociatedObject.MouseLeftButtonDown +=
(sender, e) =>
{
if (parentwindow != null)
// Tiến hành DragMove
parentwindow.DragMove();
};
}
}
}
Chú ý:
- AssociatedObject chính là đối tượng UIElement phát sinh Event
- Không phải tất cả các UIElement đều cho cùng một kết quả DragMove khi MouseLeftButtonDown vì cần xử lý nhiều hơn những dòng code trên với các control đặc thù
MainWindow.XAML
- Reference namespace "http://schemas.microsoft.com/expression/2010/interactivity"
- Reference namespace "clr-namespace:Attach_Behaviors" - chính là namespace của Project hiện tại
- Chọn đúng đối tượng cần behavior này và type mà behavior hỗ trợ cần trùng với type của đối tượng thừa hưởng behavior(ở đây là UIElement: Button, Grid, TextBox, GroupBox...)
Kết quả

Bạn có thể tải về SourceCode tại đây. Chúc các bạn thành công!
Phạm Tuân
Đăng ký:
Đăng Nhận xét (Atom)
Search
Popular Posts
-
Phong cách thiết kế Material Design nhắm đến những đường nét đơn giản, sử dụng nhiều mảng màu đậm nổi bật, các đối tượng đồ họa trong giao ...
-
Hôm nay tôi sẽ giới thiệu với các bạn một Framework đến từ Microsoft - framework này không quá lớn nhưng là khá mạnh khi các bạn làm việc vớ...
-
WPF vượt trội hơn Winform về khoản Drawing , trong đó đặc biệt WPF hỗ trợ đồ họa rất tốt vì nó tương tác trực tiếp đến GPU. Hôm nay chúng t...
-
Hôm nay chúng ta sẽ tìm hiểu cách tạo ra các menu chuột phải trên ứng dụng WPF của mình. Ở bài này chúng ta xoay quanh việc tìm hiểu cách tạ...
-
Để dễ hiểu, các bạn hãy hình dung rằng: cùng một tập tin thực thi *.EXE nhưng bạn DoubleClick 10 lần cách quãng vào nó thì chuyện gì sẽ sảy ...
-
Trong bài viết trước tôi có giới thiệu về Extension Methods trong nguôn ngữ lập trình C#; hôm nay tôi sẽ nói về một vấn đề có ý nghĩa tương...
-
Hôm nay chúng ta sẽ thử đo xem thời gian query Data của "Foreach vs LinQ vs LinQasParallel" như thế nào. Tôi tạo một tool nhỏ để l...
-
Data Binding là kĩ thuật dùng để tạo gắn kết giữa phần giao diện ( UI ) và dữ liệu thông qua phần business logic hoặc giữa các đối tượng UI...
-
LOG4NET là một thư viện mã nguồn mở cho phép chúng ta tạo ra một hoặc nhiều tập tin log, kiểu log cũng như nội dung log một cách linh hoạt v...
-
Sau hai bài giới thiệu về Caliburn.Micro framework, hôm nay chúng ta sẽ cùng bắt tay vào làm một dự án nhỏ - HelloWorld. Step 1: Add referen...
Recent Posts
Blog Archive
-
▼
2015
(48)
-
▼
tháng 4
(9)
- WPF - Làm Sao Show Được Menu Mặc Định Của Hệ Thống...
- WPF - Tìm Hiểu Về Attached Behaviors Trong WPF
- WPF Library - Tạo Kính Lúp Cho Ứng Dụng WPF (Zoom ...
- WPF - Sự Khác Nhau Giữa StaticResource với Dynamic...
- C# - XML Serialization and Deserialization(Lưu Trữ...
- C# - Tùy Chọn Khởi Động Cùng Windows Cho Ứng Dụng
- WPF – Cơ Bản Về Data Binding Trong WPF
- WPF - Tổng quan về Windows Presentation Foundation
- WPF Training – Drag and Drop Trong WPF Part II
-
▼
tháng 4
(9)
0 nhận xét:
Đăng nhận xét