Sự khác biệt giữa Thư viện điều khiển người dùng và Thư viện điều khiển tùy chỉnh là gì?


168

Tôi mới bắt đầu tăng tốc trên WPF và muốn tạo một điều khiển WPF có thể sử dụng lại.

Khi tôi xem các tùy chọn để tạo dự án trong Visual Studio, tôi thấy "Thư viện điều khiển người dùng WPF" và "Thư viện điều khiển tùy chỉnh WPF". Tôi không rõ sự khác biệt giữa chúng và các tìm kiếm Google của tôi không đưa ra bất kỳ lời giải thích hợp lý nào.

Tôi muốn hiểu sự khác biệt giữa chúng và lý tưởng là xem một số ví dụ về thời điểm sử dụng cái này hơn cái kia.


2
Đừng quên nội dung lồng nhau hoặc thay đổi mẫu của điều khiển làm tùy chọn. Bạn có thể thực hiện các thay đổi khá ấn tượng đối với điều khiển theo cách này mà không phải viết điều khiển tùy chỉnh.
MichaC

Đúng như những gì MichaC nói. Phần tốt nhất của WPF là việc tạo khuôn mẫu cho các điều khiển hiện có có thể có tác động rất lớn. Bạn nên yêu cầu điều khiển tùy chỉnh hiếm khi. Điều này không giống với WinForms khi mà ngay cả những thay đổi nhỏ đối với điều khiển cũng yêu cầu điều khiển dẫn xuất mới.
Mikko Rantanen

Vẫn hữu ích. Có một huy hiệu vàng khác.
ngerak

Câu trả lời:


117

Trong thực tế, các điều khiển tùy chỉnh là thứ bạn thực hiện ở cấp mã trong khi bạn có thể sử dụng XAML cho các điều khiển người dùng. Các điều khiển tùy chỉnh mở rộng một trong các lớp cơ sở điều khiển WPF và cung cấp chức năng bổ sung thông qua mã để tất cả logic và biểu diễn được thêm vào phải được triển khai bên trong mã.

Điều khiển người dùng về mặt kỹ thuật là một điều khiển nội dung thông thường mà bạn có thể mở rộng ở một số phần trong mã nhưng thông thường nó được mở rộng bằng cách đặt các điều khiển khác bên trong nó. Vì vậy, như Kent đã đề cập, UserControl là tổng hợp các điều khiển khác. Điều này giới hạn những gì bạn có thể làm với một điều khiển người dùng đáng kể. Nó dễ sử dụng hơn nhưng hạn chế hơn so với điều khiển tùy chỉnh đầy đủ.

Các điều khiển này có một sự khác biệt nhỏ từ quan điểm thời gian chạy. Khi xây dựng một ứng dụng và đặt UserControl vào nó, cây điều khiển sẽ có một mẫu UserControl cụ thể bên trong nó. Vì vậy, nếu chúng ta xem xét một ví dụ khập khiễng của một nút chuyên dụng. Nếu bạn đang sử dụng điều khiển người dùng, bạn sẽ thêm một nút bên trong <UserControl>phần tử. Khi sử dụng điều khiển tùy chỉnh, bạn có thể lấy chính điều khiển từ một nút. Sự khác biệt sẽ được nhìn thấy trong cây logic.

Trong khi điều khiển tùy chỉnh sẽ cung cấp một cây logic tương tự như

  • Cửa sổ
    • Nút tùy chỉnh

UserControl sẽ cung cấp một cây logic

  • Cửa sổ
    • CustomButtonUserControl
      • Cái nút

Vì vậy, cuối cùng, UserControl chỉ là một ContentControl bình thường mà bạn có thể mở rộng một chút và bạn có thể xác định trước nội dung. Kiểm soát tùy chỉnh cung cấp tính linh hoạt cao hơn với mức giá dễ thực hiện vì bạn phải thực hiện tất cả logic và tương tác trong mã thay vì có lợi ích của XAML.

Mặc dù sau tất cả những điều này, tôi không nghĩ có nhiều sự khác biệt trong các mẫu Visual Studio. Nhiều khả năng Visual Studio Custom Control chỉ tạo một dự án với điều khiển tùy chỉnh trống trong khi dự án User Control là một dự án có điều khiển người dùng trống. Sau này bạn có thể thêm bất kỳ loại mặt hàng nào vào dự án.

Cập nhật

Và ý kiến ​​của tôi về việc khi nào nên sử dụng điều khiển tùy chỉnh và điều khiển người dùng là nếu bạn có thể hoàn thành công việc với điều khiển người dùng và phần tử điều khiển bổ sung trong cây logic không làm phiền bạn, hãy sử dụng điều khiển người dùng vì chúng dễ dàng hơn nhiều tạo và duy trì. Chỉ sử dụng điều khiển tùy chỉnh nếu bạn có lý do không sử dụng điều khiển người dùng.


2
Một điều khiển tùy chỉnh có thể được sử dụng để tổng hợp các điều khiển khác?
17 trên 26 tháng

Và những gì về vấn đề skinnable / templable?
17 trên 26 tháng

1
Không chắc chắn những gì bạn có nghĩa là bằng cách tổng hợp. Bạn không thể tạo Điều khiển tùy chỉnh bằng cách tổng hợp các điều khiển khác. Tuy nhiên, bạn có thể xuất phát từ một điều khiển Bảng điều khiển như StackPanel, Lưới hoặc Bảng điều khiển để bạn có thể triển khai bộ chứa bố cục với điều khiển tùy chỉnh (Không chắc chắn nếu bạn có thể làm điều đó với Điều khiển người dùng).
Mikko Rantanen

Có, nhưng nếu bạn chỉ muốn tổng hợp các điều khiển khác thì có lẽ việc thực hiện với Điều khiển người dùng sẽ dễ dàng hơn nhiều. Tùy thuộc vào những gì bạn muốn thực hiện một điều khiển tùy chỉnh có thể thực sự khó viết, đó là lý do tại sao bạn chọn sử dụng Điều khiển người dùng mặc dù nó chỉ cung cấp một tập hợp con các khả năng.
MichaC

1
Cả hai điều khiển này phải có khả năng hiển thị / tạo khuôn mẫu khi thực hiện đúng cách. Thật không may, tài liệu tham khảo WPF của tôi hiện đang ở văn phòng nên tôi không thể kiểm tra chi tiết triển khai.
Mikko Rantanen

23

A Controlđại diện cho một số hành vi có khả năng hiển thị (templable), trong khi a UserControlnói chung là một tập hợp cấp độ cao hơn Controldành riêng cho một ứng dụng.

Thêm thông tin có sẵn ở đây .


3
Đó là một trong những liên kết tôi thấy không giải thích được mọi thứ rất tốt :). Tôi đoán một điều tôi còn thiếu là ý nghĩa của skinnable / templable thực sự có nghĩa là gì và tại sao nó không thể được thực hiện với sự kiểm soát của người dùng. Ngoài ra, câu cuối cùng của bài đăng được liên kết là "Nói chung & Nói một cách đơn giản, các điều khiển tùy chỉnh có tính linh hoạt và khả năng sử dụng lại tốt hơn so với điều khiển của người dùng". Nếu đó là sự thật thì tại sao tôi lại muốn tạo một điều khiển người dùng?
17 trên 26 tháng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.