文字を入力するためのダイアログボックスを作成してみます。
プロジェクトの作成
cd (mkdir NoXAML12)
dotnet new wpf -f net8.0
rm *.xaml
rm MainWindow.xaml.cs
ソースコード
ファイル名:NoXAML12.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>NoXAML12.App</StartupObject>
</PropertyGroup>
</Project>
ファイル名:App.xaml.cs
using System.Windows;
namespace NoXAML12;
public partial class App : Application
{
[STAThread]
public static void Main()
{
var app = new App();
var window = new MainWindow();
app.Run(window);
}
}
ファイル名:MainWindow.cs
using System.Windows;
using System.Windows.Controls;
namespace NoXAML12;
public class MainWindow : Window
{
public MainWindow()
{
Title = "入力ダイアログテスト";
Width = 400;
Height = 200;
var button = new Button
{
Content = "名前を入力",
Width = 120,
Height = 30,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
};
button.Click += (_, _) =>
{
string? input = ShowInputDialog("あなたの名前を入力してください:");
if (!string.IsNullOrWhiteSpace(input))
{
MessageBox.Show($"こんにちは、{input}さん!");
}
};
Content = button;
}
public static string? ShowInputDialog(string prompt)
{
var window = new Window
{
Title = "入力",
Width = 300,
Height = 120,
WindowStartupLocation = WindowStartupLocation.CenterOwner,
ResizeMode = ResizeMode.NoResize,
WindowStyle = WindowStyle.ToolWindow,
Owner = Application.Current?.MainWindow
};
var stack = new StackPanel { Margin = new Thickness(10) };
var label = new TextBlock { Text = prompt };
var textBox = new TextBox { Margin = new Thickness(0, 5, 0, 5) };
var button = new Button
{
Content = "OK",
IsDefault = true,
Width = 60,
HorizontalAlignment = HorizontalAlignment.Right
};
button.Click += (_, _) => window.DialogResult = true;
stack.Children.Add(label);
stack.Children.Add(textBox);
stack.Children.Add(button);
window.Content = stack;
bool? result = window.ShowDialog();
return result == true ? textBox.Text : null;
}
}
実行
dotnet run
・「名前を入力」のボタンを押す。
・1行入力のダイアログボックスが表示されるので入力する。
・入力した文字列が反映されたメッセージボックスが表示される。
コメント
これじゃWinformと変わんないな(笑)
動的生成で作るときにこういうの書いたりするけど
View部分をXAML抜きで書くと、ほとんどWinformになりますね。サクッと書けて、これはこれで良いのではないかと思います。