2013-05-06 6 views
5

イメージリストにバインドされた非常に単純なWPFデータグリッド。ディバイダ(またはメインウィンドウ自体)を使用して列のサイズを変更すると、CPUは100%になり、アプリケーションは配置/サイズ変更の無限ループに入り、ウィンドウの内容が前後にジャンプし、ユーザー入力が処理されなくなります。このWPF DataGrid無限小節/アレンジバグを回避するにはどうすればよいですか?

データグリッドは次のように定義される:(最低符号化を許してください)video of the problem is here

<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> 

物事は私が試してみた:

  • のDataGridを継承し、グリッドの測定/手配オーバーライド。
  • ウィンドウのアレンジ/メジャーをオーバーライドします。
  • グリッドスクロールバーを調整し、オフにして、さまざまなオプションを設定します。

私は何をすることはできません:.NET 4.5へ

  • のアップグレードは、このプロジェクトではオプションではありません。
  • 列を削除すると、グリッドにポイントがありません。

.Net 4.0でこの現象を回避する方法はありますか?そうでなければ、グリッドの代わりに何か他のものを使用するなどの回避策を検討しなければならないでしょう。私は年齢を過ごして過ごしましたが、その作業を失うことは嫌です。いつものように、事前

答えて

1

私は同じ問題に直面していましたが、何時間も苦労して回避策を見つけました。

DataGrid内SizeChangedイベントにイベントハンドラを追加します。

<DataGrid SizeChanged="DataGrid_SizeChanged"> 

そして、これは、イベントハンドラのコードです:

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) { } 
} 

これが良好であれば、私は知りません解決策ですが、これは私のために働いた唯一のものです。

0

おかげで、尋ねるの行為に私は再び何かをチェックアウトし、私は今、使用可能な回避策があります。

以下のように、常にスクロールバーが表示されるようにDataGridを変更します。

+0

私はあなたと同じ問題に直面しています。残念ながら、この解決法は私のためには機能しません。 –

関連する問題