作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 DataGrid 定义为
<wpftoolkit:DataGrid
x:Name="AccountsDataGrid"
AutoGenerateColumns="False"
ItemsSource="{Binding Path=Accounts}"
ColumnReordered="DataGrid_ColumnReordered"
SelectionUnit="FullRow"
RowHeaderWidth="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
>
<wpftoolkit:DataGrid.Columns>
<wpftoolkit:DataGridTextColumn Header="Account Id" Binding="{Binding Path=AccountId}" Width="Auto" />
<wpftoolkit:DataGridTextColumn Header="Account Name" Binding="{Binding Path=AccountName}" Width="*" />
</wpftoolkit:DataGrid.Columns>
</wpftoolkit:DataGrid>
加载时看起来很棒。第一列适合适合内容和标题所需的最小宽度。第二列拉伸(stretch)以填充 DataGrid 的其余宽度(因此我没有第三个填充列)。但是,如果我尝试对列重新排序,则无法将 AccountName 列的宽度调整为小于重新排序前的宽度。所以我在 ColumnReordered 事件上添加了一个处理程序,认为我可以重置列宽,但它似乎不起作用。事实上,它将 AccountId 列缩小到几乎没有,而 AccountName 列仍然无法调整得更小。
private void DataGrid_ColumnReordered(object sender, Microsoft.Windows.Controls.DataGridColumnEventArgs e)
{
foreach (DataGridColumn column in AccountsDataGrid.Columns)
{
if (column.Equals(AccountsDataGrid.Columns.Last()))
{
column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Star);
}
else
{
column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Auto);
}
}
}
是否有更好的方法来处理列宽以及为什么列重新排序会破坏列调整大小的能力
最佳答案
列在列集合中的位置没有改变。只有 DisplayIndexes 在变化。试试这个:
private void DataGrid_ColumnReordered(object sender, DataGridColumnEventArgs e)
{
int lastColumnOrder = AccountsDataGrid.Columns.Count() - 1;
foreach (DataGridColumn column in AccountsDataGrid.Columns)
{
if (column.DisplayIndex == lastColumnOrder)
{
column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Star);
}
else
{
column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Auto);
}
}
}
关于WPF DataGrid 列宽和重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1242637/
我正在开发一个响应式网站,我想让网站对宽度小于 1024 像素的浏览器使用react,并在 iPad 纵向模式下使用相同的样式。 但是,如果我像这样在浏览器小于 1024 像素时对样式应用媒体查询 @
我是一名优秀的程序员,十分优秀!