2013-07-26 99 views
10

我有一個問題用的ScrollViewer,我使用滾動包含數據網格的用戶控件。如果沒有滾動查看器,列會根據需要填充數據網格,但添加滾動查看器時,列會縮小到〜15px。我能夠簡化我的佈局,仍然可以重現此行爲。WPF的ScrollViewer影響列寬度

當綁定數據網格寬度到另一個控制列具有它們與正常的,但是其具有unsuprisingly作爲數據網格固定寬度相同的效果。 我想我不是第一個誰都有這個問題。我怎樣才能解決此問題有我網調整其大小可用空間,並給它的列的寬度propotional?

隨着ScrollViewer中: enter image description here 而不: enter image description here

<Window x:Class="GridTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<ScrollViewer HorizontalScrollBarVisibility="Auto"> 
<Grid MinWidth="200"> 
    <DataGrid Margin="0" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridCheckBoxColumn Header="Column A" Width="*"/> 
      <DataGridCheckBoxColumn Header="Column B" Width="*"/> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 
</ScrollViewer> 

+0

你有沒有嘗試過這樣的:

+0

是,同樣的結果很遺憾。 – Jay

+2

刪除Horizo​​ntalScrollBarVisibility =「Auto」並嘗試一下。 –

回答

14

是啊,我前一陣子有這個問題,我使出瞭解決方法,我將張貼在這裏只是櫃面它有用

<ScrollViewer HorizontalScrollBarVisibility="Auto"> 
    <Grid x:Name="grid" MinWidth="200"> 
     <DataGrid Width="{Binding ElementName=grid, Path=ActualWidth}"> 
      <DataGrid.Columns> 
       <DataGridCheckBoxColumn Header="Column A" Width="1*"/> 
       <DataGridCheckBoxColumn Header="Column B" Width="1*"/> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 
</ScrollViewer> 

訣竅是給DataGrid寬度,在這種情況下,我將綁定回包含元素

或者如果您不使用HorizontalScrollBar可以禁用它,這將允許ScrollViewer計算允許DataGrid計算寬度的寬度。

+1

當我調整窗口寬度的大小時,網格被調整大小,但只有當寬度增加時。任何想法如何在窗口寬度減小時調整網格大小? – mardok

+0

謝謝你使用XAML修正一點XAML的這個好例子。 ^^ – Hardryv

+0

這個建議的解決方案崩潰VS2010 :-)看起來像一個錯誤 – juFo

0

我經歷了同樣的事情的最後一週。

通常,當具有以下元素髮生此問題:

  1. DataGrid而不寬度放置在ScrollViewer內部與HorizontalScrollBarVisibility屬性設置爲Auto
  2. 至少一個DataGridColumn具有無限/未定義寬度(例如:Width="*"


實際上,該解決方案取決於你的需要:

  • 要麼你希望你的DataGridColumns採取一切可用的空間,你DataGrid時此窗口顯示(即使沒有顯示的數據):在這種情況下,sa_ddam213的答案可以幫助你應對。
  • 或者你不介意在窗口的首秀你的最後一列和DataGrid右邊框之間的一些空白。

對於最後一個選項,你只需要設置固定寬度爲您DataGridColumns(或只是不定義它,如果你不想,這不是很重要,因爲列可以被很容易地調整用戶通過雙擊)。在這種情況下,您的DataGrid可以定義沒有寬度。


下面是一個例子:

<ScrollViewer HorizontalScrollBarVisibility="Auto"> 
    <Grid x:Name="grid" MinWidth="200"> 
     <DataGrid> 
      <DataGrid.Columns> 
       <DataGridCheckBoxColumn Header="Column A" Width="100"/> 
       <DataGridCheckBoxColumn Header="Column B" /> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 
</ScrollViewer> 


通過這種方式,如果一個列的內容運行在一列自動調整大小後的容器,將出現一個水平滾動條。