Rya*_*ill 5 wpf datagrid resize
一个非常简单的WPF数据网格绑定到图像列表.在使用分隔符(或主窗口本身)调整列的大小时,CPU变为100%并且应用程序进入无限循环的排列/调整大小,导致窗口内容来回跳跃并且不再处理(锁定)用户输入.
数据网格定义为:
<DataGrid ItemsSource="{Binding ImageList}" AutoGenerateColumns="False" x:Name="ImageGrid">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Image 1" Width="40*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding ImagePath}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="EmptyText" />
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
我试过的事情:
我做不到的事:
在.Net 4.0中有没有办法绕过这种行为?如果没有,我将不得不考虑一种解决方法,例如使用其他东西代替网格,虽然我花了很多时间来设计它并且不愿意丢失这项工作.
提前致谢
我也遇到了同样的问题,经过几个小时的努力,我终于找到了解决方法。
将事件处理程序添加到 DataGrid 中的 SizeChanged 事件:
<DataGrid SizeChanged="DataGrid_SizeChanged">
Run Code Online (Sandbox Code Playgroud)
这是事件处理程序的代码:
private void DataGrid_SizeChanged(object a_sender, SizeChangedEventArgs a_args)
{
try
{
DataGrid dataGrid = a_sender as DataGrid;
if (dataGrid != null)
{
double widthDifference = Math.Abs(a_args.PreviousSize.Width - a_args.NewSize.Width);
double heightDifference = Math.Abs(a_args.PreviousSize.Height - a_args.NewSize.Height);
if ((widthDifference != 0 && widthDifference < 1) || (heightDifference != 0 && heightDifference < 1))
{
dataGrid.Measure(new Size(Math.Round(dataGrid.ActualWidth), Math.Round(dataGrid.ActualHeight)));
dataGrid.InvalidateMeasure();
}
}
}
catch (Exception) { }
}
Run Code Online (Sandbox Code Playgroud)
我不知道这是否是一个好的解决方案,但这是唯一对我有用的方法。
归档时间: |
|
查看次数: |
629 次 |
最近记录: |