2015-10-16 161 views
-1

我有一個顯示一些數據的WPF DataGrid。現在我想爲某些特定列設置自動調整大小,而不是全部。這是我目前的DataGrid的行爲:WPF - 如何自動調整DataGrid列的大小以適應內容

enter image description here

enter image description here

這是我的期望(柱的寬度應適應其內容):

enter image description here

XAML

... 
<DataGridTextColumn Binding="{Binding ShippingNumber}" Header="出荷No." ElementStyle="{DynamicResource TextAlignCenter}" IsReadOnly="True"/> 
<DataGridTextColumn Binding="{Binding DivisionDisplay}" Header="區分" ElementStyle="{DynamicResource TextAlignCenter}" IsReadOnly="True"/> 
<DataGridTextColumn Binding="{Binding ShippingDestinationCode}" Header="出荷先コード" ElementStyle="{DynamicResource TextAlignCenter}" IsReadOnly="True"/> 
<DataGridTextColumn Width="Auto" Binding="{Binding ShippingDestinationNameDisplay}" Header="出荷先名" ElementStyle="{DynamicResource TextAlignCenter}" IsReadOnly="True"/> 
<DataGridCheckBoxColumn Binding="{Binding IsCompletedStockOutcomming}" Header="出庫済み" IsReadOnly="True"> 
    <DataGridCheckBoxColumn.ElementStyle> 
     <Style TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}"> 
       <Setter Property="HorizontalAlignment" Value="Center"/> 
       <Setter Property="Margin" Value="0"/> 
       <Setter Property="IsHitTestVisible" Value="False"/> 
       <Setter Property="Focusable" Value="False"/> 
     </Style> 
    </DataGridCheckBoxColumn.ElementStyle> 
</DataGridCheckBoxColumn> 

我的項目正在應用MVVM光模式,因此它不允許在代碼隱藏中放置任何代碼,只是在ViewModel中。 我也設置With="Auto"但仍然沒有用。任何人都可以幫助我做到這一點嗎?謝謝。

+0

您是否嘗試過設置'MinWidth'和'MaxWidth' – Ash

回答

0

您可以使用DataGridLengthUnitType SizeToCells枚舉器選項,由於根據單元格的內容計算列寬。

+0

我試圖在ViewModel中添加一個名爲'CustomWidth'的屬性,然後在其中設置了'DataGridLength.SizeToCells'。在xaml文件中,我將列寬與此道具綁定,如下所示:''但它仍然無效。如果我將這個道具綁定到TextBlock控件的Text道具上,我可以看到這個值是'SizeToCells'。那麼我做錯了什麼? –

+0

有人說'DataGridTextColumn'不是從FrameworkElement派生的,它是從DependencyObject派生的。所以使用XAML和'ElementName'綁定屬性是不可能的。這樣對嗎?如果它是正確的。接下來我應該做什麼? –

+0

@QuanNguyen沒錯,你需要使用代理技術。你可以搜索更多。這個答案是正確的,但是當涉及綁定時,你的場景有點不同。如果你在XAML的Binding中找不到所謂的代理技術(有人稱之爲黑客攻擊),我會嘗試添加一些例子作爲答案。 –

相關問題