【问题标题】:Setting a minimun column width for WPF DataGrid when all its cells (rows) are empty当 WPF DataGrid 的所有单元格(行)为空时,为其设置最小列宽
【发布时间】:2018-09-23 13:13:02
【问题描述】:

我有一个 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 的宽度相同。

因此,对于这些为空的列(没有内容),我想调整它们的大小以具有最小宽度(例如,它的最小默认宽度或我指定的宽度),以便我可以按顺序利用它使其余列更宽并避免水平滚动。

【问题讨论】:

    标签: c# wpf datagrid .net-3.5 wpftoolkit


    【解决方案1】:

    网格的(大多数)内容的工作方式是填充所有可用空间。
    除非您在没有向我们展示的地方有一些额外的样式或代码,否则您不需要这些标记:

    Width="{Binding Path=ActualWidth, ElementName=outerGrid}"
    

    您没有向我们展示任何列并且您将 autogenerate 设置为 false,所以这看起来有点奇怪。
    此外,Datagrid 在 wpf net 框架中,所以我不明白为什么你有 my: 在它前面,除非这个 datagrid 以某种方式从 datagrid 继承。

    从表面上看,您的问题的答案似乎很简单。
    数据网格列具有 MinWidth 属性,您可以设置它。
    https://msdn.microsoft.com/en-us/library/system.windows.controls.datagridtextcolumn_properties(v=vs.110).aspx

    事实证明,还有一些更复杂的标准。

    假设您的窗口有一个视图模型,并且该数据网格的 itemssource 已绑定到其上的一个属性。添加另一个属性。您可以将其设为双精度并将列宽绑定到该值,或者使用布尔值和数据触发器来设置宽度。无论哪种方式。使用一些 linq 迭代您的集合并检查所有值是否不为空。在此基础上设置属性。
    你可以使用 trueforall https://msdn.microsoft.com/en-us/library/kdxe4x4w(v=vs.110).aspx

    【讨论】:

    • 我觉得我解释得不好。当一列的所有单元格值为空时,如何设置固定列宽?默认情况下,列的 MinWidth 设置为 20,在我的情况下,当列的所有单元格为空时,列宽与其标题宽度相同,我不希望这样,在这种情况下我希望列宽小于标题宽度,为自定义固定值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 2014-03-18
    • 1970-01-01
    • 2019-01-01
    • 2011-05-10
    • 2018-06-08
    相关资源
    最近更新 更多