WPF弹出窗口出现在其他桌面窗口上方,如何只让它出现在WPF主窗口的顶部?

6
我有一个WPF主窗口,其中包含一个网格,并添加了一个WPF弹出窗口,以在单击按钮时要求用户提供额外信息。但问题是,当其他桌面窗口移动到弹出窗口上方时,弹出窗口会覆盖其他桌面窗口。如何解决此问题,使弹出窗口仅置于WPF主窗口的最顶层,而不是其他桌面窗口之上。弹出窗口的行为类似于任务管理器,当设置为始终置于顶部!
如果使用下面的代码,您将看到弹出窗口始终保持在最上层。因此,将任何其他桌面窗口移到弹出窗口上方,弹出窗口将覆盖其他桌面应用程序!请注意,我不想使用StaysOpen =“False”。
<Grid>
    <Popup Name="myPopup" Placement="Center" IsOpen="True">
        <StackPanel Background="Green" >
            <TextBox Width="200" Margin="0,0,10,0"/>
            <Button Name="closePopupBtn" Content="close" Width="100" />
        </StackPanel>
    </Popup>
</Grid>
2个回答

2

您在弹出窗口中设置了Owner属性。 在您的弹出窗口中,

this.owner = instanceOfParentWindow;

这与你的问题类似。

弹出窗口始终位于顶部

他们在这里使用user32.dll创建自定义弹出窗口


4
WPF弹出窗口没有所有者。 - Alexey Khrenov
是的,问题不是关于WPF窗口,而是关于WPF弹出元素。 - undefined

1

我知道这是一个老问题,我通过搜索如何解决相同的问题来到了这里。

最简单、最有效的方法是用工具提示控件替换弹出窗口。 工具提示共享相同的基本功能,但它不像弹出窗口那样作为单独的层,因此工具提示不会出现在其他应用程序的顶部。

(弹出窗口不是WPF定义的控件,它是一个组件,不打算直接使用)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接