WPFの描画

各地でコントロールの描画について話題になっていたのでWPFを使ってCheckBoxを400個ほど表示してみました。(追記)サンプルを修正しました。
ウィンドウのリサイズは自動的にサイズ調整するので重いですが、描画自体は軽いと思います。比較対象がないので感覚に過ぎませんが。2000個のチェックボックスに対するチェックの切り替えに1秒強くらいでした(Athlon64 2.2GHz+GeForce FX 5700)。しかし、XAMLのサンプルは見かけますがソースコードのサンプルが少なくて、意外と手こずりました。(^^;

using System;
using System.Windows;
using System.Windows.Controls;

namespace MyFirstAvalonApp {
    public partial class Window1 : Window {
        const int ROWS = 50;
        const int COLS = 40;
        Grid grid;

        public Window1 () {
            this.Title = "CheckBox Sample";

            grid = new Grid ();

            for (int i = 0; i < COLS; ++i) {
                ColumnDefinition cd = new ColumnDefinition ();
                grid.ColumnDefinitions.Add (cd);
            }

            for (int i = 0; i < ROWS; ++i) {
                RowDefinition rd = new RowDefinition ();
                grid.RowDefinitions.Add (rd);
            }

            for (int i = 0; i < ROWS; ++i) {
                for (int j = 0; j < COLS; ++j) {
                    CheckBox cb = new CheckBox ();
                    cb.Content = String.Format("{0},{1}", i, j);
                    cb.IsChecked = true;
                    Grid.SetRow (cb, i);
                    Grid.SetColumn (cb, j);
                    grid.Children.Add (cb);
                }
            }

            Button button = new Button ();
            button.Content = "Click me";
            button.Click += OnClick;

            DockPanel dp = new DockPanel ();
            DockPanel.SetDock (button, Dock.Bottom);
            dp.Children.Add (button);
            dp.Children.Add (grid);

            this.AddChild (dp);
        }
        void OnClick (object sender, RoutedEventArgs e) {
            foreach (CheckBox cb in grid.Children)
                cb.IsChecked = !cb.IsChecked;
        }
    }
}

どーでもいい話ですが、WPFよりもAvalonの方がカッコイイと思うのですよ。