スキップしてメイン コンテンツに移動

DataGridの高さが自動では縮小しない

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)
{
    grid.RowHeight = 0;
    grid.UpdateLayout();
    grid.RowHeight = double.NaN;
    grid.UpdateLayout();
}

一応、問題は認識されているみたいなので将来的には修正されることを期待したい。

コメント

このブログの人気の投稿

KoeMill V.0.9.0.0 リリース

KoeMillのV.0.9.0.0をリリース KoeMillは、音声認識による文字起こしを行うソフトウェアです。音声認識モデルにはWhisperが採用されており動画や音声から自動的に高品質な文字起こしができるため、煩雑な手作業を省くことができます。 オフラインで動作するため、ネットワークの遅延などによる遅れやプライバシーに関する懸念もありません。また、GPUを利用することで高速な処理を実現します。 ダウンロードページ

CapCap V.0.9.2.7 リリース

CapCapのV.0.9.2.7をリリース 主な変更内容 HTTP POST設定でヘッダの設定に対応 HTTP POST設定でJSONのオブジェクトおよび配列に対応 HTTP POST設定を大項目ごとに折りたためる機能に対応 サンプルプリセット(ChatGPT API)を追加 プリセット複製時に複製先の変更が複製元に及んでいた不具合を修正 HTTP POST設定 新たにリクエストヘッダを設定できるようになりました。これによりAuthorizationによる認証などヘッダが必要なAPIにも対応できるようになりました。合わせて、これまで設定することが出来なかったJSON ObjectおよびArrayについても設定できるようになりました。 ChatGPT APIについて サンプルプリセットを追加しました。HTTP POSTのヘッダおよびJSON ArrayとObjectに対応したため、その対応例となります。 継続的に使おうとすると費用が発生することになるので、無料枠が残っている間に遊んでもらえると幸いです。 DLページ: Home

CapCap V0.9.2.5 リリース

CapCapのV0.9.2.5をリリース 主な変更内容 段落検出機能を追加 字幕モードの名称を変更(Readability -> Text, Layout -> Item) 段落検出 テキストの行同士の距離をもとに段落を検出することが出来るようになりました。 段落の検出および段落間への空行挿入が行なえます。 これまではテキストをひと繋がりの文章として認識していましたが、段落ごとに分離されることで可読性の向上が見込めます。 文章に対して段落が多い場合や段落が2行からなる場合などには精度が落ちる傾向にあります。また実験的機能の側面があるため問題点等あればご報告いただけると助かります。 DLページ: Home