2014-10-11 72 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