# 画面設計書 114-Sub

## 概要

本ドキュメントは、AppWithoutLifetimeサンプルアプリケーションにおけるサブウィンドウ「Sub」の画面設計書である。このウィンドウは、メインウィンドウから開かれる子ウィンドウであり、シンプルなテキスト表示のみを行う。

### 本画面の処理概要

この画面は、メインウィンドウから開かれるサブウィンドウで、「Welcome to Avalonia Sub!」というテキストを表示する。AppWithoutLifetimeサンプルにおけるウィンドウ間の関係性（オーナーウィンドウパターン）をデモンストレーションする。

**業務上の目的・背景**：Avaloniaフレームワークにおけるウィンドウの親子関係（オーナー/所有ウィンドウ）のデモンストレーションを目的としている。Show(owner)メソッドを使用してウィンドウを表示することで、親ウィンドウとの関係性を維持する方法を示している。これは、ダイアログやツールウィンドウの実装パターンとして参考になる。

**画面へのアクセス方法**：AppWithoutLifetimeアプリケーションのメインウィンドウ（No.113）で「Open」ボタンをクリックすると、このサブウィンドウが表示される。

**主要な操作・処理内容**：
1. テキスト表示の確認：「Welcome to Avalonia Sub!」テキストを表示
2. ウィンドウの閉じる操作：標準のウィンドウ閉じるボタンで閉じる

**画面遷移**：
- 遷移元：メインウィンドウ（No.113）の「Open」ボタンクリック
- 遷移先：なし

**権限による表示制御**：特になし

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 42 | Window | 主機能 | サブウィンドウ表示 |

## 画面種別

サブウィンドウ / 表示

## URL/ルーティング

該当なし（デスクトップアプリケーション）

## 入出力項目

該当なし（入力項目なし）

## 表示項目

| 項目名 | 表示位置 | 説明 |
|--------|----------|------|
| ウェルカムテキスト | ウィンドウ内 | 「Welcome to Avalonia Sub!」テキスト（Windowの直接コンテンツ） |

## イベント仕様

### 1-ウィンドウクローズ

サブウィンドウが閉じられると、リソースが解放される。

- **トリガー**：ウィンドウの閉じるボタンクリック、Alt+F4、またはプログラムからのClose()呼び出し
- **処理フロー**：
  1. ウィンドウが閉じられる
  2. メインウィンドウは影響を受けない（非モーダル）

## データベース更新仕様

### 操作別データベース影響一覧

該当なし（データベースを使用しない）

## メッセージ仕様

該当なし

## 例外処理

該当なし（シンプルなデモウィンドウ）

## 備考

- ウィンドウタイトルは「Window1」（デフォルトのまま）
- デザインサイズは800x450
- 非モーダルウィンドウとして表示される（Show()使用）
- オーナーウィンドウとしてメインウィンドウが指定される
- オーナーウィンドウが閉じられると、このサブウィンドウも閉じられる

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: ウィンドウ表示の呼び出し元を理解する

サブウィンドウがどのように開かれるかを確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | MainWindow.axaml.cs | `samples/AppWithoutLifetime/MainWindow.axaml.cs` | Openメソッドでのnew Sub().Show(this) |

**読解のコツ**: Show(owner)の引数としてメインウィンドウ(this)を渡すことで、オーナーウィンドウ関係が設定される。

**主要処理フロー**:
- **19-22行目**: Openメソッドでnew Sub().Show(this)を呼び出し

#### Step 2: UI定義を理解する

XAMLファイルでUIレイアウトを確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Sub.axaml | `samples/AppWithoutLifetime/Sub.axaml` | シンプルなテキストコンテンツ |

**主要処理フロー**:
- **7行目**: ウィンドウタイトル「Window1」
- **8行目**: 直接コンテンツとして「Welcome to Avalonia Sub!」テキスト

#### Step 3: コードビハインドを理解する

コードビハインドでの初期化処理を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Sub.axaml.cs | `samples/AppWithoutLifetime/Sub.axaml.cs` | 標準的なWindow初期化パターン |

**主要処理フロー**:
- **8-11行目**: コンストラクタでInitializeComponentを呼び出し
- **13-16行目**: InitializeComponentでAvaloniaXamlLoader.Load(this)

### プログラム呼び出し階層図

```
MainWindow.Open(sender, e)
    │
    └─ new Sub()
           │
           └─ Sub.InitializeComponent()
                  │
                  └─ AvaloniaXamlLoader.Load(this)
    │
    └─ Sub.Show(this)
           │
           └─ サブウィンドウ表示（オーナー: MainWindow）
```

### データフロー図

```
[入力]                    [処理]                         [出力]

Openボタンクリック ───▶ new Sub() ───▶ Subインスタンス生成
                           │
                           ▼
                     Show(MainWindow)
                           │
                           ▼
                     サブウィンドウ表示 ───▶ 画面表示
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Sub.axaml | `samples/AppWithoutLifetime/Sub.axaml` | XAML | サブウィンドウUIレイアウト |
| Sub.axaml.cs | `samples/AppWithoutLifetime/Sub.axaml.cs` | ソース | コードビハインド |
| MainWindow.axaml.cs | `samples/AppWithoutLifetime/MainWindow.axaml.cs` | ソース | サブウィンドウ呼び出し元 |
