我无法将弹出窗口的所有者设置为应用程序主窗口。WPF + PRISM如何将弹出窗口的所有者作为主窗口
在这里,我做了什么。
创建一个带有自定义PopupWindow的主窗口。
<Window x:Class="MainWindow" ... <Window.Resources> <Style x:Key="MessageWindowStyle" TargetType="{x:Type Window}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="WindowStyle" Value="None" /> <Setter Property="ResizeMode" Value="NoResize" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="SnapsToDevicePixels" Value="True" /> <Setter Property="ShowInTaskbar" Value="False"/> <Setter Property="AllowsTransparency" Value="True"/> </Style> </Window.Resources> <i:Interaction.Triggers> <interactionRequest:InteractionRequestTrigger SourceObject="{Binding MessageRequest, Mode=OneWay}"> <interactionRequest:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True" WindowStyle="{StaticResource MessageWindowStyle}" > <interactionRequest:PopupWindowAction.WindowContent> <controls:PageCustomPopup /> </interactionRequest:PopupWindowAction.WindowContent> </interactionRequest:PopupWindowAction> </interactionRequest:InteractionRequestTrigger> </i:Interaction.Triggers> ... </Window>
PageCustomPopup.xaml
这是弹出窗口基本XAML。
<UserControl x:Class="PageCustomPopup"
...
</UserControl>
- PageCustomPopup.xaml.cs
主窗口后面的代码。
public InteractionRequest<Notification> MessageRequest { get; private set; } public MainWindow() { ... MessageRequest = new InteractionRequest<Notification>(); ... } void Button_OnClick(object sender, EventArgs e) { MessageRequest.Raise(new Notification(){ Title = "Title Text", Content = "Message to Display"}); }
在该页面代码隐藏,我试图设置父,被装载在弹出窗口时。但它抛出异常。
public partial class PageCustomPopup : UserControl, InteractionRequestAware, INotifyPropertyChanged
{
public PageCustomPopup()
{
Loaded += (sender, args) =>
{
try
{
var parentWindow = this.Parent as Window;
if (parentWindow != null)
{
// This line fails with "Cannot set the Owner after the window is displayed."
//parentWindow.Owner = Application.Current.MainWindow;
// First, default to the main window's dimensions
parentWindow.Width = Application.Current.MainWindow.Width;
parentWindow.Height = Application.Current.MainWindow.Height;
parentWindow.Left = Application.Current.MainWindow.Left;
parentWindow.Top = Application.Current.MainWindow.Top;
}
}
}
}
}
当显示自定义弹出窗口,它正确地显示在主窗口的中心。
但问题是,当所有的窗口都被最小化时,如果点击任务栏上的应用程序图标,应用程序主窗口将显示出来并显示。无法选择任何东西。
弹出式窗口被隐藏起来,不能放到前面。
将Popup窗口放在前面的唯一方法是使用“Alt + Tab”键。
我的问题是,如何将自定义弹出窗口的所有者设置为Application.Current.MainWindow? 这样,通过选择任务栏图标或Alt + Tab,显示主窗口和弹出窗口。
谢谢Szabolcs !!!。此解决方案完美运作。 – ATati
@ATati你可以请upvote并接受答案。 –