我有一个WPF数据网格,它有一些列。有时,根据具体情况,填充时会有一些列没有内容(整列对所有行都是空的)。
<Window x:Name="MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit">
<Grid x:Name="outerGrid" HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<my:DataGrid Grid.Row="1" Name="MyDataGrid"
AutoGenerateColumns="False"
ItemsSource="{Binding Path=MyListOfItems}"
SelectedItem="{Binding Path=MySelectedItem}"
VerticalAlignment="Stretch" IsReadOnly="True"
SelectionMode="Single" ColumnWidth="*"
SelectionChanged="dgEfectes_SelectionChanged"
Width="{Binding Path=ActualWidth, ElementName=outerGrid}">
</my:DataGrid>
</Grid>
</Window>
请注意,DataGrid的宽度与Grid周围的宽度相同。
因此,对于这些空的列(没有内容),我想调整它们以使其具有最小宽度(例如,它的最小默认宽度或我指定的宽度),那么我可以按顺序利用它使其余列更宽,避免水平滚动。
答案 0 :(得分:0)
网格的内容(大多数)工作方式是填充所有可用空间 除非你在某个地方有一些额外的样式或代码而你没有向我们展示,否则你不需要这些标记:
Width="{Binding Path=ActualWidth, ElementName=outerGrid}"
你没有向我们显示任何列,你设置autogenerate false,所以这看起来有点奇怪 此外,Datagrid在wpf网络框架中,所以我不遵循为什么你有我的:在它之前,除非这个数据网格以某种方式从datagrid继承。
从表面上看,你问题的答案似乎很简单 datagrid列具有MinWidth属性,您可以设置它 https://msdn.microsoft.com/en-us/library/system.windows.controls.datagridtextcolumn_properties(v=vs.110).aspx
事实证明,有一些更复杂的标准。
假设您有一个窗口的viewmodel,并且datagrid的itemssource绑定到该属性。添加另一个属性。您可以将其设为double并将列宽绑定到该值,或使用bool和datatrigger设置宽度。无论哪种方式。使用一些linq迭代您的集合并检查所有值是否都不为空。在此基础上设置属性 您可以使用trueforall https://msdn.microsoft.com/en-us/library/kdxe4x4w(v=vs.110).aspx