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ạo ra một ContextMenu - Menu ngữ cảnh và ở bài sau tôi sẽ chỉ cách Custom ContextMenu cho đẹp hơn.
I> ContextMenu là gì?
ContextMenu là các menu ngữ cảnh, tức menu sẽ show cho chúng ta một số hành động mà chúng ta có thể thực thi trong bối cảnh nhất định nào đó. Thông thường, một người sử dụng cho hiển thị nhiều ContextMenu trong giao diện người dùng (UI) bằng cách nhấn phải chuột.
Một ContextMenu được đính kèm với một điều khiển cụ thể(Vùng, đối tượng). Các ContextMenu cho phép bạn trình bày cho người dùng một danh sách các mục/lệnh hoặc tùy chọn có liên quan với một control/panel cụ thể, ví dụ, một Button,Grid ... Người dùng phải click vào control/panel đó để làm cho menu xuất hiện. Điển hình, nhấp chuột vào một MenuItem sẽ mở ra một menu con hoặc thực hiện một lệnh nào đó.
II> Cách tạo ContextMenu
Hầu hết các Control trong WPF đều có thể chứa một ContextMenu, và tôi sẽ tạo ContextMenu cho một Button như sau bằng code XAMLHoặc chúng ta có thể tạo với code C# như sau
btn = new Button();
btn.Content = "Created with C#";
contextmenu = new ContextMenu();
btn.ContextMenu = contextmenu;
mi = new MenuItem();
mi.Header = "File";
mia = new MenuItem();
mia.Header = "New";
mi.Items.Add(mia);
mib = new MenuItem();
mib.Header = "Open";
mi.Items.Add(mib);
mib1 = new MenuItem();
mib1.Header = "Recently Opened";
mib.Items.Add(mib1);
mib1a = new MenuItem();
mib1a.Header = "Text.xaml";
mib1.Items.Add(mib1a);
contextmenu.Items.Add(mi);
cv2.Children.Add(btn);
Kết quả khi Right_Click vào Button
Ngoài ra bạn cũng có thể lấy các mục menu từ các nguồn khác nhau để show tại một bối cảnh cụ thể nào đó bằng cách Merge ContextMenus - CompositeCollection
Chúng ta sẽ thực hiện Handel Event cho việc Click vào MenuItem như sau
Để đẹp hơn chúng ta có thể Apply style cho các MenuItem, tôi tạo Style như sao
Lưu ý rằng để Apply style này cho đối tượng MenuItem thì tôi cần Set giá trị Style của mỗi MenuItem như sau Style="{StaticResource SimpleSysResources}". Nhưng chúng ta làm cho 12 Item thì thật mất công, vì vậy với một Control mà nó có thể chứa nhiều Item như Menu/ListBox thì chúng ta chỉ cần khai báo ở control cha(Menu/ListBox...) mà thôi. Thường chúng ta sẽ làm thế này
Đơn giản hơn chúng ta chỉ cần sử dụng property ItemContainerStyle=""
Kết quả
Chúc các bạn thành công. SourceCode
Phạm Tuân
Phạm Tuân
Chúc các bạn thành công!
PHẠM TUÂN
Đăng nhập để nhận bài
ConversionConversion EmoticonEmoticon