This other SO question hỏi về hộp văn bản tự động hoàn thành trong WPF. Một số người đã xây dựng những điều này và một trong những câu trả lời được đưa ra ở đó gợi ý this codeproject article.WPF: Hộp văn bản tự động hoàn thành, ... lại
Nhưng tôi không tìm thấy bất kỳ Hộp văn bản tự động hoàn thành WPF nào so sánh với hộp văn bản tự động hoàn thành WinForms. Mẫu CodeProject hoạt động, loại, ...
alt text http://i50.tinypic.com/sx2ej5.jpg
... nhưng
- nó không được cấu trúc như một điều khiển tái sử dụng hoặc DLL. Đó là mã tôi cần phải nhúng trong mọi ứng dụng.
- Chỉ hoạt động với các thư mục. nó không có các thuộc tính để thiết lập cho dù nguồn tự động hoàn thành chỉ là các thư mục hệ thống tập tin hay các tệp hệ thống tệp, hoặc .... vv. Tôi có thể viết mã để làm điều này, tất nhiên, nhưng ... Tôi muốn sử dụng mã của người khác đã được viết.
- không có thuộc tính để đặt kích thước bật lên, v.v.
- có hộp danh sách bật lên hiển thị số lần hoàn thành có thể đặt. Khi điều hướng qua danh sách đó, hộp văn bản không thay đổi. Nhập một ký tự trong khi tập trung vào hộp danh sách sẽ không làm cho hộp văn bản được cập nhật.
- điều hướng tiêu điểm ra khỏi hộp danh sách không làm cho hộp danh sách bật lên biến mất. Điều này là khó hiểu.
Vì vậy, câu hỏi của tôi:
* Có ai có một textbox miễn phí WPF AutoComplete mà làm việc, và cung cấp một kinh nghiệm chất lượng UI *
ĐÁP
?Đây là cách tôi đã thực hiện:
.0. lấy số WPF Toolkit
.1. chạy MSI cho Bộ công cụ WPF
.2. Trong Visual Studio, kéo/thả từ hộp công cụ - cụ thể là nhóm Hình ảnh hóa dữ liệu - vào trong Trình thiết kế giao diện người dùng. Nó trông giống như thế này trong hộp công cụ VS:
alt text http://i49.tinypic.com/s12q6x.jpg
Nếu bạn không muốn sử dụng các nhà thiết kế, tay nghề XAML. Nó trông giống như thế này:
<toolkit:AutoCompleteBox
ToolTip="Enter the path of an assembly."
x:Name="tbAssembly" Height="27" Width="102"
Populating="tbAssembly_Populating" />
... nơi không gian tên toolkit được ánh xạ theo cách này:
xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
.3. Cung cấp mã cho sự kiện Populating
.Đây là những gì tôi đã sử dụng:
private void tbAssembly_Populating(object sender, System.Windows.Controls.PopulatingEventArgs e)
{
string text = tbAssembly.Text;
string dirname = Path.GetDirectoryName(text);
if (Directory.Exists(Path.GetDirectoryName(dirname)))
{
string[] files = Directory.GetFiles(dirname, "*.*", SearchOption.TopDirectoryOnly);
string[] dirs = Directory.GetDirectories(dirname, "*.*", SearchOption.TopDirectoryOnly);
var candidates = new List<string>();
Array.ForEach(new String[][] { files, dirs }, (x) =>
Array.ForEach(x, (y) =>
{
if (y.StartsWith(dirname, StringComparison.CurrentCultureIgnoreCase))
candidates.Add(y);
}));
tbAssembly.ItemsSource = candidates;
tbAssembly.PopulateComplete();
}
}
Nó hoạt động, chỉ cần theo cách bạn mong muốn. Nó cảm thấy chuyên nghiệp. Không có bất kỳ sự bất thường nào mà sự kiểm soát từ mã vạch trưng bày. Đây là những gì nó trông giống như:
alt text http://i50.tinypic.com/24qsopy.jpg
Thanks to Matt for the pointer để bộ công cụ WPF.
Âm thanh hấp dẫn, Matt. Có hướng dẫn hoặc ví dụ về cách sử dụng AutoCompleteBox không? Tôi tìm thấy DLL có chứa nó. Tôi sử dụng xmlns nào trong XAML? Tôi thực sự sử dụng nó như thế nào? – Cheeso
Lưu ý rằng liên kết bài đăng trên blog tôi vừa thêm các cuộc đàm phán về Silverlight, nhưng AutoCompleteBox cũng dành cho WPF. –
Bộ công cụ WPF trên CodePlex đã chết, nhưng có một số nhánh trên GitHub, nếu có ai đó cần: [jogibear9988/wpftoolkit] (https://github.com/jogibear9988/wpftoolkit), [WPFToolkit.DataVisualization] (https://github.com/davidalpert/WPFToolkit.DataVisualization), [theonlylawislove/WPFToolkit] (https://github.com/theonlylawislove/WPFToolkit), [jrwren/wpftoolkit] (https://github.com/jrwren/wpftoolkit). – Athari