我的第一行看起来像这样:
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>
答案 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)
有很多方法可以做到这一点。
所以即。来自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状态并通过转换器运行它。