2011-09-15 57 views
1

我有一個帶有兩列的WPF DataGrid;我希望第二列自動適合網格,所以我將其寬度設置爲「*」。但是,在運行時,DataGrid調整爲一個荒謬的寬度。帶星列的DataGrid調整整個DataGrid的大小

這裏是我的基本標記與(我認爲)無關的控件和屬性中刪除:

<Grid> 
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
     <Grid> 
      <StackPanel> 
       <DataGrid Name="MyGrid" AutoGenerateColumns="False" 
          CanUserAddRows="False" CanUserReorderColumns="False" 
          CanUserResizeColumns="False"> 
        <DataGrid.Columns> 
         <DataGridTextColumn Header="Column 1" Width="Auto" Binding="{Binding Field1}"/> 
         <DataGridTextColumn Header="Column 2" Width="*" Binding="{Binding Field2}"/> 
        </DataGrid.Columns> 
       </DataGrid> 
      </StackPanel> 
     </Grid> 
    </ScrollViewer> 
</Grid> 

我懷疑問題出在數據網格中ScrollViewer中之中。我試過的ScrollViewer的寬度設置爲DataGrid的寬度:

Width="{Bidning ElementName=MyGrid, Path=ActualWidth}" 

this post建議,但沒有運氣。我也嘗試將Horizo​​ntalScrollBarVisibility設置爲Disabled,但隨後一切消失(嚴重)。

我還應該提到所有這些都在UserControl中,該UserControl位於另一個UserControl中,然後位於Window中,這可能與一切「消失」有關(我懷疑寬度已經變得瘋狂並且一切都「關閉」窗戶')。

+1

您在使用.NET 4.0?我還記得大約2-3周前關於同一主題的另一個主題。我認爲它確定是一個4.0的bug,它在3.5中工作。 – tsells

+0

是的,使用.NET 4.0。如果這是重複的,我會很感激,如果有人能指出我以前的問題。 –

+0

我找了它,找不到它。在WPF標籤下查找並回到某種方式,您可能會發現它。 – tsells

回答

1

嘗試刪除DataGrid之前的所有內容,簡化佈局。 DataGrid已經包含一個嵌入到默認模板中的ScrollViewer。另外,使用StackPanel,您可以讓子項填充所有可用空間 - StackPanel根據其內容的大小進行延伸。因此,您的DataGrid延伸到無限。

我也改變了DataGrid的Name屬性到x:名稱,這裏爲什麼是: In WPF, what are the differences between the x:Name and Name attributes?

<DataGrid 
    x:Name="MyGrid" 
    AutoGenerateColumns="False" 
    CanUserAddRows="False" 
    CanUserReorderColumns="False" 
    CanUserResizeColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Column 1" Width="Auto" Binding="{Binding Field1}"/> 
     <DataGridTextColumn Header="Column 2" Width="*" Binding="{Binding Field2}"/> 
    </DataGrid.Columns> 
</DataGrid> 
相關問題