WinUI3のDataGrid(CommunityToolkit)の話 現象 セル中のTextBoxでAcceptReturnsなどを設定し複数行に対応出来る状態にする。その状態で複数行入力するとセルの高さが自動で拡大していく。ここまでは直感的な動作。 一方でその文字列を削除していっても セルの高さは自動で縮小したりはしない 。 直感的にはTextBox中の行が減るとTextBoxの表示域も減ると思うが、そうはなっていない。WPFやFormsはおそらく自動で縮小したと思うのでCommunityToolkitの実装上のチョンボだと思う。 検討 デバッガでセル中のTextBoxなどUI要素のサイズを確認してもAuto(double.NaN)のまま。したがって、セルの要素が広げているわけではなくてDataGridのRow側が広がったままになっているっぽい。 ただそうなるとDataGridの特定行のサイズは果たして変更できるのか、出来たとしてどうやって? ChatGPTに聞いた答えを動作するように修正したのが以下のアイデア。実際にはItemsSourceがリセットされる兼ね合いで選択セルが飛ぶので違和感が大きい。 private static void ResetRowHeight(this DataGrid grid) { var itemsSource = grid.ItemsSource; grid.ItemsSource = null; grid.ItemsSource = itemsSource; } ただ、考え方としては参考になるところがあって、要はDataGridに表示域の再計算を迫れば良い。 対策 発掘されたのが以下の投稿。 DataGrid Row Auto-Resize only grows row height but won't shrink (microsoft.com) 2008年のSilverliteの話らしいけど、Microsoft.Toolkit.Uwp.UI.Controls.DataGridでも有効な対策だった。まぁ、若干ちらつくところはありますが…、及第点でしょう。 private static void ResetRowHeight(this DataGrid grid) {...