缩小WPF中DataGrid的列宽

时间:2011-08-23 16:10:49

标签: c# wpf xaml

我的第一行看起来像这样:

Title 1 2 3 4 5 6 7 ...

如果我选择

ColumnWidth="Auto"

它正确调整大小,但列之间的空间太大。有没有办法缩小它?我试着在我的xaml后面的代码中获取数据

if (textColumn != 0) {
textColumn.Width = 8;
}

或类似的东西,但大小似乎没有改变。我不确定这是否正确,因为我是WPF和C#的新手。感谢。

编辑:

XAML:

<DataGrid x:Name="dtGridReads"  AutoGenerateColumns="False" 
        VirtualizingStackPanel.IsVirtualizing="True"                                       
        VirtualizingStackPanel.VirtualizationMode ="Standard"
          EnableColumnVirtualization="True"
          EnableRowVirtualization="True"
        ScrollViewer.IsDeferredScrollingEnabled="True"
        CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="True"
         ItemsSource ="{Binding}" Block.TextAlignment="Center"
         AlternatingRowBackground="LightGoldenrodYellow" RowBackground="White"
          CanUserAddRows="False" CanUserDeleteRows="False" FrozenColumnCount="1"
           GridLinesVisibility="None" Style="{StaticResource ConcensusDataGridStyle}" FontSize="12" >
</DataGrid>

2 个答案:

答案 0 :(得分:0)

您需要创建一个列宽转换器类,并将值传递给转换器以相应地设置您的大小。

这是转换器

 private const double StaticGridWidth = 602;


public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    if ((value != null) && (parameter != null))
    {
        double newValue = (double)value - StaticGridWidth;
        double dparam = double.Parse(parameter.ToString());
        double width = newValue * (dparam/1000);
        return (width > 0) ? width : 0;
    }

    return null;
}

以下是XAML中的用法

<Converters:WidthConverter x:Key="widthConvert" />

<GridViewColumn Header="{Binding TypeColumnHeader}"  
                                Width="{Binding Path=ActualWidth, ElementName=treeGrid, Converter={StaticResource widthConvert}, ConverterParameter=190}" 

                            />

请注意,如果要构建区域应用程序,则传入的值必须是整数。如果你在xaml和本地使用中使用小数,对于小数 - 它将是EXPLODE。

答案 1 :(得分:0)

有很多方法可以做到这一点。

  1. 首先,您需要为每列创建一列。
  2. 所以即。来自MSDN

    <sdk:DataGrid x:Name="dataGrid4" 
        Height="160" Margin="0,5,0,10" 
        RowHeight="40" AutoGenerateColumns="False" >    
        <sdk:DataGrid.Columns>
            <sdk:DataGridTextColumn 
                Header="First Name" 
                Width="SizeToHeader"
                Binding="{Binding FirstName}" 
                FontSize="20" />
            <sdk:DataGridTextColumn 
                Header="Last Name" 
                Width="SizeToCells"
                Binding="{Binding LastName}" 
                FontSize="20" />
            <sdk:DataGridTextColumn 
                Header="Address"
                Width="150"
                Binding="{Binding Address}" >
                <sdk:DataGridTextColumn.ElementStyle>
                    <Style TargetType="TextBlock">
                        <Setter Property="TextWrapping" Value="Wrap"/>
                    </Style>
                </sdk:DataGridTextColumn.ElementStyle>
                <sdk:DataGridTextColumn.EditingElementStyle>
                    <Style TargetType="TextBox">
                        <Setter Property="Foreground" Value="Blue"/>
                    </Style>
                </sdk:DataGridTextColumn.EditingElementStyle>
            </sdk:DataGridTextColumn>
            <sdk:DataGridCheckBoxColumn 
                Header="New?" 
                Width="40"
                Binding="{Binding IsNew}" />
            <sdk:DataGridCheckBoxColumn 
                Header="Subscribed?" 
                Width="Auto"
                Binding="{Binding IsSubscribed}" 
                IsThreeState="True" />
        </sdk:DataGrid.Columns>
    </sdk:DataGrid>
    

    SizeToHeader意味着它将根据标头的长度来调整大小 在宽度上你也可以做类似的事情 width =“8”表示您将宽度值硬编码为8

    您也可以将其作为百分比

    所以假设你有3列 你想要一个列宽.3 *,接下来你想要.5 *和下一个你想要.2 *组成100%的数据网格。你可以这样说 宽度= “5 *”;

    您还可以将宽度绑定到某种属性在视图模型中,如果您想要更改它,此外您还可以执行tsells状态并通过转换器运行它。