2014-10-11 68 views
-1

我有一个DataGrid绑定到主窗口中的一些数据。当添加足够的行时,垂直滚动条就会显示。但是,它太高,以至于底部滚动按钮不可见并且最后一行被切断。DataGrid上的垂直滚动条太高

下面是一个简化的例子的图片,与滚动一路下跌:

enter image description here

没有人有任何想法是怎么回事?我猜这跟WrapPanel有关,不能像我期望的那样自动调整它的高度。

下面是代码:

MainWindow.xaml

<Window x:Class="TestScroll.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="200" Width="450"> 

    <WrapPanel> 
     <TextBlock 
       Text="TextBlock" 
       Width="400" 
       Height="40"/> 

     <DataGrid 
      x:Name="Control" 
      AutoGenerateColumns="False" 
      CanUserAddRows="False" 
      HeadersVisibility="Column" 
      Width="400" 
      ItemsSource="{Binding}" > 
      <DataGrid.Columns> 
       <DataGridTextColumn 
        Binding="{Binding Factor}" 
        Header="Header"> 
       </DataGridTextColumn> 
      </DataGrid.Columns> 
     </DataGrid> 
    </WrapPanel> 

</Window> 

MainWindow.xaml.cs

using System.Collections.ObjectModel; 
using System.Windows; 

namespace TestScroll 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      var Table = new ObservableCollection<ViewModel>(); 
      this.DataContext = Table; 

      for (int i = 0; i < 10; ++i) 
      { 
       var row = new ViewModel(); 
       row.Symbol = i.ToString(); 
       row.Factor = decimal.Parse(row.Symbol)/100; 
       Table.Add(row); 
      } 
     } 
    } 
} 

个ViewModel.cs

using System.ComponentModel; 

namespace TestScroll 
{ 
    public class ViewModel : INotifyPropertyChanged 
    { 
     private string _symbol; 
     public string Symbol 
     { 
      get { return _symbol; } 
      set 
      { 
       _symbol = value; 
       OnPropertyChanged("Symbol"); 
      } 
     } 

     private decimal _factor; 
     public decimal Factor 
     { 
      get { return _factor; } 
      set 
      { 
       _factor = value; 
       OnPropertyChanged("Factor"); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     protected void OnPropertyChanged(string propertyName) 
     { 
      PropertyChangedEventHandler handler = this.PropertyChanged; 
      var e = new PropertyChangedEventArgs(propertyName); 
      if (handler != null) 
       handler(this, e); 
     } 
    } 
} 
+0

发布DataGrid及其父项的XAML代码。 – kennyzx 2014-10-11 04:29:06

+0

是的,我将不得不做一个简单的例子。发布的代码太多。 – 2014-10-11 12:47:21

+0

重要的是如何设置DataGrid及其容器的高度,其他代码应该是不相关的。 – kennyzx 2014-10-11 13:27:40

回答

1

试试这个,

<DockPanel> 
    <TextBlock DockPanel.Dock="Top" 
      .../> 
    <DataGrid...> 
    </DataGrid> 
</DockPanel> 

修改与替代DockPanel中和WrapPanel设置的第一个孩子的DockPanel.Dock = “顶级”。

+0

是的,这确实有效。但是,它不回答我关于WrapPanel的问题。我想知道为什么我不能使用WrapPanel,它似乎是实际应用的自然选择(即使我错了)。 – 2014-10-27 20:27:18

+1

与其他控件不同,'DataGrid' auto会从包含的Grid中增长以适应其内容(如果您要添加多行)。我之前发现过这个问题。修复方法是将明确的MaxHeight设置为DataGrid,或将其高度绑定到包含网格。 http://stackoverflow.com/a/6680526/815938有几个其他的解决方案。 – kennyzx 2014-10-28 01:52:40