動的に変数を作成してコントロールタイプを格納

# メインウィンドウのXAMLファイルを読み込む
[xml]$Xaml = Get-Content -Path "$PSScriptRoot\\GUI\\MainWindow.xaml"

# XAMLからコントロールを読み込んで動的に変数を作成する関数
Function Create-DynamicVariablesForControls {
    param([xml]$Xaml)

    # 追番用のハッシュテーブルを初期化
    $typeCounters = @{}

    # XAML内の全てのコントロール要素を検索
    $Xaml.SelectNodes("//*") | ForEach-Object {
        $controlType = $_.LocalName
        $controlName = $_.Name

        # Nameプロパティがある場合はその名前を使用
        if ($controlName) {
            $varName = "${controlType}_$controlName"
        } else {
            # Nameプロパティがない場合は追番を使用
            if (-not $typeCounters.ContainsKey($controlType)) {
                $typeCounters[$controlType] = 1
            } else {
                $typeCounters[$controlType]++
            }
            $varName = "${controlType}_" + $typeCounters[$controlType]
        }

        # 変数を動的に作成(値はシンプルなデモとしてコントロールのタイプ)
        New-Variable -Name $varName -Value $controlType -Force
        Write-Output "変数作成: $varName = $controlType"
    }
}

# 関数を呼び出してコントロールに対する動的変数を作成
Create-DynamicVariablesForControls -Xaml $Xaml

動的に変数を作成してコントロールオブジェクトを格納(FindNameのみ)

# メインウィンドウのXAMLファイルを読み込む
[xml]$Xaml = Get-Content -Path "$PSScriptRoot\\GUI\\MainWindow.xaml"

# XAMLを読み込んでウィンドウを作成
$reader = New-Object System.Xml.XmlNodeReader $Xaml
$Window = [Windows.Markup.XamlReader]::Load($reader)

# XAMLからコントロールを読み込んで動的に変数を作成する関数
Function Create-DynamicVariablesForControls {
    param([Windows.Markup.XamlReader]$Window)

    # 追番用のハッシュテーブルを初期化
    $typeCounters = @{}

    # XAML内の全てのコントロール要素を検索
    $Window.Content.FindName | ForEach-Object {
        $control = $_
        $controlType = $_.GetType().Name
        $controlName = $_.Name

        # Nameプロパティがある場合はその名前を使用
        if ($controlName) {
            $varName = "${controlType}_$controlName"
        } else {
            # Nameプロパティがない場合は追番を使用
            if (-not $typeCounters.ContainsKey($controlType)) {
                $typeCounters[$controlType] = 1
            } else {
                $typeCounters[$controlType]++
            }
            $varName = "${controlType}_" + $typeCounters[$controlType]
        }

        # 変数を動的に作成(値としてコントロールオブジェクトを設定)
        New-Variable -Name $varName -Value $control -Force
        Write-Output "変数作成: $varName は $($control.GetType().Name) 型のオブジェクトを保持"
    }
}

# 関数を呼び出してコントロールに対する動的変数を作成
Create-DynamicVariablesForControls -Window $Window

# ウィンドウの表示
$Window.ShowDialog()

動的に変数を作成して

# メインウィンドウのXAMLファイルを読み込む
[xml]$Xaml = Get-Content -Path "$PSScriptRoot\\GUI\\MainWindow.xaml"

# XAMLを読み込んでウィンドウを作成
$reader = New-Object System.Xml.XmlNodeReader $Xaml
$Window = [Windows.Markup.XamlReader]::Load($reader)

# XAMLからコントロールを読み込んで動的に変数を作成する関数
Function Create-DynamicVariablesForControls {
    param([Windows.Markup.XamlReader]$Window)

    # 追番用のカウンター
    $counter = 0

    # XAML内の全てのコントロール要素を検索
    $Xaml.SelectNodes("//*[@Name]") | ForEach-Object {
        $controlName = $_.Name
        $controlType = $_.LocalName

        # コントロール名を使ってウィンドウ内から対応するオブジェクトを取得
        $control = $Window.FindName($controlName)

        if ($control -ne $null) {
            # 変数名はコントロールタイプと名前を組み合わせて生成
            $varName = "${controlType}_$controlName"

            # 変数を動的に作成し、値をコントロールオブジェクトに設定
            New-Variable -Name $varName -Value $control -Force
            Write-Output "変数作成: $varName は $($control.GetType().Name) 型のオブジェクトを保持"
        } else {
            # Nameプロパティがない場合は、_の後に追番をつけて変数を作成
            $varName = "${controlType}_" + ++$counter

            # このケースでは、対応するオブジェクトが見つからないため、値は$null
            New-Variable -Name $varName -Value $null -Force
            Write-Output "変数作成: $varName (対応するコントロールが見つかりません)"
        }
    }
}

# 関数を呼び出してコントロールに対する動的変数を作成
Create-DynamicVariablesForControls -Window $Window

# ウィンドウの表示
$Window.ShowDialog()

Nameプロパティの有無に関わらずオブジェクトを取得する

# メインウィンドウのXAMLファイルを読み込む
[xml]$Xaml = Get-Content -Path "$PSScriptRoot\\GUI\\MainWindow.xaml"

# XAMLを読み込んでウィンドウを作成
$reader = New-Object System.Xml.XmlNodeReader $Xaml
$Window = [Windows.Markup.XamlReader]::Load($reader)

# XAMLからコントロールを読み込んで動的に変数を作成する関数
Function Create-DynamicVariablesForControls {
    param([Windows.Markup.XamlReader]$Window)

    # 追番用のカウンターを初期化
    $counter = 0

    # XAML内の全てのノードを対象に検索
    $Xaml.SelectNodes("//*") | ForEach-Object {
        $nodeName = $_.LocalName
        $node = $Window.FindName($_.Name)

        if ($node -ne $null) {
            # Name属性があるノードの場合
            $varName = "${nodeName}_$($_.Name)"
        } else {
            # Name属性がないノードの場合、追番をつける
            $varName = "${nodeName}_" + ++$counter
            # 対応するWPFオブジェクトを取得するための別の方法が必要な場合があります
            # ここではシンプルのためにXmlNode自体を使用しています
            $node = $_
        }

        # 変数を動的に作成し、値をノードオブジェクトに設定
        New-Variable -Name $varName -Value $node -Force
        Write-Output "変数作成: $varName は $($node.GetType().Name) 型のオブジェクトを保持"
    }
}

# 関数を呼び出してコントロールに対する動的変数を作成
Create-DynamicVariablesForControls -Window $Window

# ウィンドウの表示
$Window.ShowDialog()

WPFとWindowsFormsHostの両方のオブジェクトに対応する

# メインウィンドウのXAMLファイルを読み込む
[xml]$Xaml = Get-Content -Path "$PSScriptRoot\\GUI\\MainWindow.xaml"

# XAMLを読み込んでウィンドウを作成
$reader = New-Object System.Xml.XmlNodeReader $Xaml
$Window = [Windows.Markup.XamlReader]::Load($reader)

# XAMLからコントロールを読み込んで動的に変数を作成する関数
Function Create-DynamicVariablesForControls {
    param([Windows.Markup.XamlReader]$Window)

    # 追番用のカウンターを初期化
    $counter = 0

    # XAML内の全てのノードを対象に検索
    $Xaml.SelectNodes("//*") | ForEach-Object {
        $nodeName = $_.LocalName
        $node = $Window.FindName($_.Name)

        if ($node -eq $null -and $_.Name -eq '') {
            # Name属性がないノードの場合、追番をつける
            $nodeName += "_" + ++$counter
        }

        if ($node -is [System.Windows.Forms.Integration.WindowsFormsHost]) {
            # WindowsFormsHost内のコントロールに対応
            $childControl = $node.Child
            $varName = "WinFormsHost_" + $childControl.Name
            $node = $childControl
        } elseif ($node -ne $null) {
            # 通常のWPFコントロール
            $varName = "${nodeName}_$($_.Name)"
        } else {
            # WindowsFormsHost以外で、Name属性がない場合
            $varName = $nodeName
            # 対応するWPFオブジェクトが見つからないため、XmlNodeを使用
            $node = $_
        }

        # 変数を動的に作成し、値をノードオブジェクトに設定
        New-Variable -Name $varName -Value $node -Force
        Write-Output "変数作成: $varName は $($node.GetType().Name) 型のオブジェクトを保持"
    }
}

# 関数を呼び出してコントロールに対する動的変数を作成
Create-DynamicVariablesForControls -Window $Window

# ウィンドウの表示
$Window.ShowDialog()