WPF/Get-ParentControl.ps1

function Get-ParentControl
{
    param(
    [Parameter(ValueFromPipeline=$true, Mandatory=$false)]
    [Alias('Tree')]
    $Control = $this
    )
    
    process {
        if (-not $Control) { return }         
        $parent = $control
        while ($parent) {
            if ($parent -is [Windows.Window]) { return $parent } 
            if ('ShowUI.ShowUISetting' -as [type]) {
                $controlName = try {
                    $parent.GetValue([ShowUI.ShowUISetting]::ControlNameProperty)
                } catch {
                    Write-Debug $_
                }
                if ($controlName) { return $parent }
            }
            $newparent = try {
                [Windows.Media.VisualTreeHelper]::GetParent($parent)
            } catch {
                Write-Debug $_
            } 
            if (-not $newParent) { $parent } 
            $parent = $newParent
        }                    
    }
}