Private/_NewXAMLWindow.ps1

function _NewXAMLWindow {
    param (
        [string]$FormName
    )

    $xamlFile = "$ModuleRoot\Assets\$FormName.xaml"

    #create window
    $inputXML = Get-Content $xamlFile -Raw
    $inputXML = $inputXML -replace 'mc:Ignorable="d"', '' -replace 'x:N', 'N' -replace '^<Win.*', '<Window'
    [XML]$XAML = $inputXML
    $xaml.window.'Window.Resources'.ResourceDictionary.'ResourceDictionary.MergedDictionaries'.ResourceDictionary.Source = $ThemeFile

    #Read XAML
    $reader = (New-Object System.Xml.XmlNodeReader $xaml)
    try {
        New-Variable -Name $FormName -Value ([Windows.Markup.XamlReader]::Load( $reader )) -Scope Script -Force
    }
    catch {
        Write-Warning $_.Exception
        throw
    }
    $xaml.SelectNodes('//*[@Name]') | ForEach-Object {
        try {
            Set-Variable -Name "$($FormName)_$($_.Name)" -Value (Get-Variable $FormName).Value.FindName($_.Name) -Scope Script -Force -ErrorAction Stop
        }
        catch {
            throw
        }
    }
}