2025/06/20

データグリッドの派生クラス

WinUI3のデータグリッドでは基本的にDataGridTextColumnを使いますが、文字の色や背景、ツールチップを追加等は派生クラスをいちいち定義するのが結局一番効率が良いのかな?例えばタイム型データマイニングだと

internal class DataGridTextColumnTimeDM : DataGridTextColumn
{
    protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
    {
        Border border = new Border
        {
            HorizontalAlignment = HorizontalAlignment.Stretch, // セル内で均等に広がる
            VerticalAlignment = VerticalAlignment.Stretch, // 上下も均等に広がる
            Padding = new Thickness(5) // 適度な余白
        };
        TextBlock textBlock = new TextBlock
        {
            TextAlignment = TextAlignment.Center, // テキストを中央揃え
            HorizontalAlignment = HorizontalAlignment.Center, // 左右中央揃え
            VerticalAlignment = VerticalAlignment.Center // 上下中央揃え
        };
        if (dataItem is RaceDetailInfo item)
        {
            textBlock.Text = item.TimeDM;

            // 現在のテーマを取得
            var theme = Application.Current.RequestedTheme;

            // 文字色を変更
            switch (item.TimeDMRank)
            {
                case 1:
                    border.Background = new Microsoft.UI.Xaml.Media.SolidColorBrush(SaraD64Constants.BackColor1);
                    textBlock.Foreground = new SolidColorBrush(Colors.Black);
                    break;
                case 2:
                    border.Background = new Microsoft.UI.Xaml.Media.SolidColorBrush(SaraD64Constants.BackColor2);
                    textBlock.Foreground = new SolidColorBrush(Colors.Black);
                    break;
                case 3:
                    border.Background = new Microsoft.UI.Xaml.Media.SolidColorBrush(SaraD64Constants.BackColor3);
                    textBlock.Foreground = new SolidColorBrush(Colors.Black);
                    break;
                default: // その他
                    textBlock.Foreground = new SolidColorBrush(theme == ApplicationTheme.Dark ? Colors.White : Colors.Black);
                    break;
            }
            // ツールチップ追加
            ToolTipService.SetToolTip(textBlock, item.TimeDMToolTip);
        }

        border.Child = textBlock; // Border に TextBlock を含める
        return border;
    }
}

ああ、現在のテーマチェックして一応ダークモードとライトモードで切り替えは自分でやる必要があるっぽい。まっ、テーマ的に全て色を統一してれば自動にって方法があるのかもですが、これまで色にあくまでも近い形にしたいので深く考えずに少しだけ考慮しておこうかと。ただ、実際自分はダークモードしか使わないので、一通り形になった時に念のためにライトモードは試してからリリースしなきゃだなぁっと。

まだまだ全然途中ですが、

こんな感じにしていく予定です。

ここ最近、プライベートで色々とあり、まあ、気分転換的に少しプログラミングから一旦離れ、余暇は「ダイヤのエース」を一気見しました。気晴らしのつもりがちょっと長かったorz ただ、最後まで観ないと気になるので最後は惰性で😅 75+51+52=178話で20分/話だとしても60時間弱 ちょっとしばらくはアニメはやめて映画に戻ろうかと思います。

0 件のコメント:

コメントを投稿