格子状に領域を分割するGridコントロールを試してみます。左クッリクでGirdの分割数を増やすプログラムになっています。XAMLを使わないプログラミングなので、動的にGridの格子数を増減させてみます。
プロジェクトの作成
cd (mkdir NoXAML13)
dotnet new wpf -f net8.0
rm *.xaml
ソースファイル
ファイル名:NoXAML13.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
<StartupObject>NoXAML13.App</StartupObject>
</PropertyGroup>
</Project>
ファイル名:App.xaml.cs
using System.Windows;
namespace NoXAML13;
public partial class App : Application
{
[STAThread]
public static void Main()
{
var app = new App();
var window = new MainWindow();
app.Run(window);
}
}
ファイル名:MainWindow.xaml.cs
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace NoXAML13;
public partial class MainWindow : Window
{
private Grid _grid;
private int _cellCount = 1;
public MainWindow()
{
Title = "Grid Sample (No XAML)";
Width = 400;
Height = 400;
_grid = new Grid();
Content = _grid;
UpdateGrid();
MouseDown += OnMouseDown;
}
private void OnMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
{
_cellCount++;
}
else if (e.ChangedButton == MouseButton.Right)
{
_cellCount = Math.Max(1, _cellCount - 1);
}
UpdateGrid();
}
private void UpdateGrid()
{
_grid.Children.Clear();
_grid.RowDefinitions.Clear();
_grid.ColumnDefinitions.Clear();
for (int i = 0; i < _cellCount; i++)
{
_grid.RowDefinitions.Add(new RowDefinition());
_grid.ColumnDefinitions.Add(new ColumnDefinition());
}
for (int row = 0; row < _cellCount; row++)
{
for (int col = 0; col < _cellCount; col++)
{
var rect = new Border
{
Background = new SolidColorBrush(Color.FromRgb(
(byte)(100 + row * 10),
(byte)(100 + col * 10),
200)),
BorderBrush = Brushes.Black,
BorderThickness = new Thickness(1)
};
Grid.SetRow(rect, row);
Grid.SetColumn(rect, col);
_grid.Children.Add(rect);
}
}
}
}
実行
dotnet run
起動時(グリッド数1×1)
左クリック1回目(グリッド数2×2)
左クリック2回目(グリッド数3×3)
左クリック3回め(グリッド数4×4)
感想
動的に格子が増減するようになってはいますが、増減のたびにGridの中身をクリアして再度格子を作り直していて、実用的ではない感じがします。Gridは静的な使い方をしたほうが無難そうだなぁと感じました。
コメント