2012-08-12 51 views
7

Tôi đang tìm cách hiển thị dữ liệu dạng bảng (kênh truyền hình), nhưng với các tùy chọn như DataGrid/UniformGrid/Table với FlowDocument/etc. Tôi không thể tìm ra những gì sẽ là lựa chọn tốt nhất. Vấn đề chính là các tế bào không đồng đều về kích thước vì nó thay đổi tùy theo độ dài thời gian và tôi cũng muốn đặt đệm giữa chúng. Ngoài ra, tôi cần chỉ có thể hiển thị một phần của bảng và cho phép chúng cuộn lên/xuống/phải để xem phần còn lại.Điều khiển Bảng/Lưới nào trong WPF?

Tùy chọn điều khiển WPF tốt nhất cho điều này là gì? Đây là một minh họa nhỏ về những gì tôi đang làm. Hình vuông màu trắng ở phía trên bên trái là những gì tôi muốn hiển thị lúc bắt đầu, và cho phép chúng cuộn đến phần còn lại của nó.

enter image description here

+0

những gì về một bảng điều khiển bọc, bạn có thể thêm một người xem cuộn để nó tạo ra di chuyển, và chừng nào bạn đặt màn hình của bạn theo thứ tự và có cùng một chiều cao vấn đề chiều rộng và vị trí sẽ được giải quyết bởi bảng điều khiển – Clueless

Trả lời

3

Có một số cách để thực hiện những gì bạn đang cố gắng làm ở đây. Nếu hiệu suất không phải là một vấn đề thì tôi sẽ bỏ qua ảo hóa và thử DockPanel Hạn chế ở đây là bạn sẽ phải thêm các mục theo thứ tự thay vì thêm chúng theo hàng.

Một tùy chọn khác sẽ là sử dụng hai ngăn xếp ngăn xếp (một trong mỗi hướng). Điều này giải quyết vấn đề thêm, nhưng yêu cầu sử dụng nhiều bảng hơn.

Cả hai tùy chọn trước đó sẽ yêu cầu các mục riêng lẻ phải có chiều cao/chiều rộng được đặt.

Tùy chọn cuối cùng (tùy thuộc vào mức độ lớn lưới của bạn), sẽ sử dụng Lưới có hàng và cột có kích thước cố định với các mục trải dài hàng (sử dụng thuộc tính rowspan). Hạn chế của phương thức này là tôi không biết cách nào tốt để tạo điều khiển này trong xaml cho số hàng/cột không xác định, do đó bạn sẽ phải tạo nó trong mã để nhận số hàng/cột cần thiết.

Nếu bạn gặp sự cố về hiệu suất, bạn có thể thử sử dụng VirtualizingStackPanel. Nếu điều này vẫn không đáp ứng các yêu cầu về hiệu suất của bạn thì bạn sẽ cần phải phân lớp VirtualizingPanel và điều chỉnh nó để đáp ứng các nhu cầu cụ thể của bạn.

Xem here để biết thêm thông tin về hiệu suất Bảng điều khiển.

Tôi đề nghị cố gắng phương pháp hai StackPanel đầu tiên, sau đó phương pháp VirtualizingStackPanel và cuối cùng, nếu điều đó không làm việc, sau đó thử VirtualizingPanel

Padding có thể dễ dàng thực hiện bằng cách thiết lập các Margin tài sản trên mỗi subcontrol.

Đối với di chuyển sử dụng các ScrollViewer

+0

Tôi nghĩ rằng StackPanels sẽ là cách tiếp cận tốt nhất –

+0

Cảm ơn bạn rất nhiều vì câu trả lời tuyệt vời. Tôi sẽ tiếp tục và chấp nhận điều này và trao thưởng tiền thưởng. Tôi sẽ sử dụng Stack Panels w/Scroll Viewer, nhưng nó sẽ là tốt nhất để có 1 bảng xếp chồng theo chiều dọc với tên kênh ở bên trái và bảng ngăn xếp ngang ở bên cạnh mỗi dữ liệu EPG hoặc chỉ một khối các ngăn xếp ngang, 1 cho mỗi kênh và thay vào đó bao gồm tên/biểu tượng kênh trong đó? –

+0

@BrettPowell Tôi có lẽ sẽ có một itemscontrol với một stackpanel như itemspanel (đó là mặc định) cho dọc và sau đó một mẫu với một điều khiển cho các kênh bên cạnh một stackpanel ngang cho các chương trình. Điều này sẽ đơn giản hóa cách bố trí và ràng buộc. – mydogisbox

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