2010-05-10 51 views
7

Tôi đang tìm cách tạo điều khiển hộp văn bản WPF hoạt động tương tự như hộp văn bản người nhận email trong Outlook (đầu vào Tới, Cc và Bcc). Tôi không nhất thiết phải quan tâm nhiều về tự động hoàn thành (tôi đã tìm thấy hàng triệu ví dụ cho điều đó), nhưng những gì tôi thực sự đang gặp phải là làm thế nào để có các mục nhập văn bản được phân cách trong hộp văn bản hoạt động như các thực thể theo cách chúng thực hiện Outlook (khi người nhận bạn đã nhập giải quyết, văn bản đó sẽ trở thành 'thực thể' mà bạn có thể nhấp để chọn, nhấp chuột phải để có menu ngữ cảnh, v.v. không còn 'văn bản thuần túy' trong đó bạn có thể đặt con trỏ của mình) ...Tạo điều khiển hộp văn bản WPF như hộp văn bản người nhận email Outlook

Có ai có ý tưởng cấp cao nào về cách thực hiện việc này không? Biết bất kỳ ví dụ hiện tại nào (tôi đã googled hàng giờ)?

Cảm ơn bạn rất nhiều trước,

Michael.

+0

Có thể bài viết này có thể giúp bạn: [Giới thiệu về TagBox] (http://www.thesilvermethod.com/Default.aspx?Id=IntroducingTagBox) – xVir

+0

http://blog.pixelingene.com/2010/10/tokenizing- control-convert-text-to-tokens/ - Xem xét điều khiển này – Sahadevan

Trả lời

5

Quá trình suy nghĩ sơ bộ của tôi sẽ là ... (lưu ý: Tôi không thực sự mã hóa nó, vì vậy chi tiết của tôi có thể hơi lệch ...).

cao hành vi mức:

  • kiểu dữ liệu trong kiểm soát của bạn là một danh sách các mục mà không phải là lựa chọn. Do đó, kiểm soát của bạn, khoảng, ItemsControl (về mặt hình ảnh/XAML, đó là ItemsControl với bố cục kiểu WrapPanel và rất đơn giản TextBlock cho mẫu mục).
  • khi kiểm soát của bạn tăng tiêu điểm, bạn cần chuyển mẫu thành TextBox
  • khi điều khiển mất tiêu điểm, bạn cần chia văn bản đã nhập và chuyển đổi nó thành danh sách để hiển thị.

Do đó, mã nghĩ:

  • bạn cần một UserControl, có thể có nguồn gốc từ ItemsControl. Điều đó mang lại cho bạn hành vi cơ bản để đại diện cho một danh sách các mục.
  • bạn cần tùy chỉnh DependencyProperty trên điều khiển của bạn đại diện cho chuỗi được phân tách.
  • khi thuộc tính chuỗi thay đổi, bạn cần phải phân tích cú pháp và thay thế danh sách các mục trong điều khiển.
  • khi thuộc tính danh sách thay đổi, bạn cần phải thay thế thuộc tính chuỗi bằng danh sách được phân cách phù hợp.

Về mặt mã, phần đó khá đơn giản. Sau đó, cho mẫu XAML ...

  • bạn cần một mẫu cơ sở đó sẽ hiển thị bất động sản Items của bạn như là một danh sách, sử dụng WrapPanel bố trí nêu trên.
  • bạn cần trình kích hoạt thay thế mẫu này khi điều khiển đã tập trung.
  • mẫu thay thế phải là TextBox được gắn với thuộc tính chuỗi của điều khiển.
  • hành vi ràng buộc mặc định trên TextBox sẽ chỉ đẩy giá trị mới khi số TextBox mất tiêu điểm, vì vậy bạn cần suy nghĩ xem liệu bạn có muốn thực hiện hay không. danh sách phiên bản - khi giá trị của thuộc tính chuỗi thay đổi, codebehind của bạn sẽ cập nhật danh sách).

Điều này sẽ cung cấp cho bạn hành vi cơ bản. Bạn có thể ràng buộc thuộc tính danh sách hoặc thuộc tính chuỗi từ ngoài tầm kiểm soát, mặc dù bạn có thể phải cẩn thận về những gì xảy ra nếu bạn ràng buộc cả hai thuộc tính vì có sự phụ thuộc hai chiều giữa chúng ...

Các vấn đề liên quan