Открывайте WPF Window сверху, но не всегда держитесь сверху с помощью Powershell - PullRequest
0 голосов
/ 08 января 2020

Я столкнулся с проблемой при использовании WPF. Когда я открываю окно, я хочу, чтобы оно открывалось поверх всех других программ, но я не хочу, чтобы оно оставалось всегда сверху, только первоначальное открытие. Я знаю, что установка topmost на true будет открываться сверху (что у меня есть в Xaml), но я не могу найти способ изменить его на false после его открытия.

Это просто тестовая функция с окном WPF.

function foo{
    #Load Assembly and Library
    Add-Type -AssemblyName PresentationFramework

    $inputXaml = @"
    <Window x:Class="SharepointCreateOpportunity.completeWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:SharepointCreateOpportunity"
        mc:Ignorable="d"
        Title="Window Title" Height="250" MinHeight="250" MaxHeight="250" Width="500" MinWidth="500" MaxWidth="500" Topmost="True" WindowStartupLocation="CenterScreen" Background="Black" >

    <Grid>
        <Button Name="oKBtn" Content="OK" Margin="0,0,20,20" HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="72" Height="23"/>
    </Grid>
</Window>
"@
    #Gets rid of elements from the Xaml so it can be converted
    $inputXamlClean = $inputXaml -replace 'mc:Ignorable="d"','' -replace "x:N",'N' -replace 'x:Class=".*?"','' -replace 'd:DesignHeight="\d*?"','' -replace 'd:DesignWidth="\d*?"',''
    [xml]$xaml = $inputXamlClean

    #Creates the Window
    $XMLReader = (New-Object System.Xml.XmlNodeReader $xaml)
    $Window = [Windows.Markup.XamlReader]::Load($XMLReader)

    #Creates variables for all the elements on the window
    $xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name ($_.Name) -Value $Window.FindName($_.Name)}

    #OK Button Action
    $okBtn.Add_Click({
        $Window.Close()
    })

    #Show window
    $Window.ShowDialog()
}

foo

1 Ответ

0 голосов
/ 11 января 2020

Если Topmost не установлен в XAML, окно будет отображаться сверху при запуске скрипта (при условии, что других windows с установленным Topmost нет) и будет вести себя как обычное окно рабочего стола, где фокусируется на других windows с помощью мыши или клавиатуры заставит окно потерять положение переднего плана.

Таким образом, чтобы окно было «сверху» для «только начального открытия», избавление от свойства Topmost или присвоение ему значения false будет работать, опять же при условии, что других 1011 * с установленным Topmost не будет. Если на самом деле есть другие windows, борющиеся за верхнюю позицию, вы можете использовать SetForegroundWindow, чтобы временно поставить ее наверх:

{ ссылка }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...