WPFをWinFormsライクに使う:Grid+GridSplitterで左右ペインを作る

コンピュータ

ウインドウ内を左右に2分割し、中央のツマミ(GridSplitter)を左右に操作することで領域を増減させます。

ソースコード

ファイル名:gridSplitterSample.csproj


<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UseWPF>true</UseWPF>
  </PropertyGroup>

</Project>

ファイル名:Program.cs



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

public static class Program
{
    [System.STAThread]
    public static void Main()
    {
        // グリッド
        var grid = new Grid();

        // グリッドカラム
        grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1.0d, GridUnitType.Star) }); // 0 ... "1*"
        grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(5.0d) }); // 1 ... "5"
        grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1.0d, GridUnitType.Star) }); // 2 ... "1*"

        // 左パネル
        var leftPanel = new StackPanel();
        Grid.SetColumn(leftPanel, 0);
        grid.Children.Add(leftPanel);

        // 左パネル→ラベル
        leftPanel.Children.Add(new TextBlock
        {
            Text = "左パネル",
            Margin = new Thickness(12),
        });

        // 中央スプリッター(つまみ)
        var splitter = new GridSplitter
        {
            HorizontalAlignment = HorizontalAlignment.Stretch,
        };
        Grid.SetColumn(splitter, 1);
        grid.Children.Add(splitter);

        // 右パネル
        var rightPanel = new WrapPanel();
        Grid.SetColumn(rightPanel, 2);
        grid.Children.Add(rightPanel);

        // 左パネル→ラベル
        rightPanel.Children.Add(new TextBlock
        {
            Text = "右パネル",
            Margin = new Thickness(12),
        });


        // ウィンドウ
        var win = new Window
        {
            Title = "WinForm風WPF",
            Width = 420,
            Height = 260,
            Content = grid
        };

        // アプリケーションの実行
        new Application().Run(win);
    }
}

実行イメージ

dotnet run

コメント