2009-03-23 27 views
47

Khi tôi chạy Bộ công cụ WPF của Northwind Mã vạch từ this article, tôi nhận được dữ liệu, nhưng có không có thanh cuộn và do đó người dùng chỉ có thể nhìn thấy một phần dữ liệu. Tôi đang sử dụng phiên bản mới nhất Tháng 3 năm 2009.làm cách nào tôi có thể bật thanh cuộn trên Bảng dữ liệu WPF?

Tôi cần chỉ định gì để Bảng dữ liệu WPF có thanh cuộn?

Tôi đã thử đặt DataGrid trong ScrollViewer nhưng điều đó không có tác dụng.

XAML:

<Window x:Class="TestDataGrid566.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit" 
    Title="Window1" Height="600" Width="800"> 
    <StackPanel> 
     <toolkit:DataGrid x:Name="TheDataGrid" AutoGenerateColumns="True"/> 
    </StackPanel> 
</Window> 

code-behind:

using System.Linq; 
using System.Windows; 
using TestDataGrid566.Model; 

namespace TestDataGrid566 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      NorthwindDataContext db = new NorthwindDataContext(); 
      var customers = from c in db.Customers 
          select c; 
      TheDataGrid.ItemsSource = customers; 
     } 
    } 
} 
+0

Bản sao có thể có của [Bảng dữ liệu WPF - Không hiển thị bất kỳ thanh cuộn nào] (https://stackoverflow.com/questions/24015890/wpf-datagrid-not-showing-any-scrollbar) –

Trả lời

79

Đặt DataGrid trong một Grid, DockPanel, ContentControl hoặc trực tiếp trong Window. Một chiều dọc theo định hướng StackPanel sẽ cung cấp cho con của nó bất cứ điều gì theo chiều dọc không gian họ yêu cầu - ngay cả khi điều đó có nghĩa là nó được hiển thị ra khỏi xem.

+1

Để thêm vào điều này, một 'HeaderedContentControl' được thực hiện trong nội bộ với một 'StackPanel' mà sẽ gây ra một' DataGrid' để hành xử một cách không phù hợp với 'ContentControl'. – user7116

+2

Tôi nghĩ lời khuyên này là rác trong nhiều giờ, cho đến khi cuối cùng tôi phát hiện ra thẻ StackPanel ẩn nấp ở đầu XAML của tôi. Cảm ơn! – Ted

+1

Cũng có một Stackpanel theo chiều dọc sẽ cản trở ảo hóa và ảnh hưởng đến hiệu suất ứng dụng. – kiran

35

WPF4

<DataGrid AutoGenerateColumns="True" Grid.Column="0" Grid.Row="0" 
     ScrollViewer.CanContentScroll="True" 
     ScrollViewer.VerticalScrollBarVisibility="Auto" 
     ScrollViewer.HorizontalScrollBarVisibility="Auto"> 
</DataGrid> 

với: <ColumnDefinition Width="350" /> & <RowDefinition Height="300" /> hoạt động tốt.

Thanh cuộn không hiển thị với <ColumnDefinition Width="Auto" /> & <RowDefinition Height="300" />.

Ngoài ra hoạt động tốt với: <ColumnDefinition Width="*" /> & <RowDefinition Height="300" /> trong trường hợp này được lồng trong một bên ngoài <Grid>.

+0

IntelliSense của tôi cho tôi biết không có * ScrollViewer * trong DataGrid * ... –

+1

@Konrad Viltersten 'ScrollViewer' là thuộc tính đính kèm. – xmedeko

+0

Cảm ơn, nó giúp !! – Sunny656

13

Nếu bất kỳ container mẹ RowDefinition Chiều cao thiết lập để "Auto" cũng Stoppers cho thanh cuộn

Hoặc bạn có thể thiết lập Height "*"

nào xảy ra trong trường hợp của tôi.

5

Thêm MaxHeight và VerticalScrollBarVisibility = "Auto" trên DataGrid đã giải quyết được sự cố của tôi.

1

Thêm lưới có chiều cao và chiều rộng được xác định cho cột và hàng. Sau đó, thêm ScrollViewer và bên trong nó thêm dataGrid.

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