Обновление: Хорошо, я только что понял, что у вас нет контроля над веб-страницей, я могу только думать о том, чтобы добавить какой-нибудь JavaScript-код на страницу, добавить обработчик события в событие LoadCompleted WebBrowser и ввести javascript там, это должно позаботиться об этом и не требовать, чтобы вы изменили исходную веб-страницу:
// Add a reference to Microsoft.mshtml
using mshtml;
// inside the window constructor after you set
// the webBrowser's ObjectForScripting property
this.webBrowser.LoadCompleted += this.webBrowser_LoadCompleted;
void webBrowser_LoadCompleted(object sender, NavigationEventArgs e)
{
var doc = (HTMLDocument)webBrowser.Document;
var head = doc.getElementsByTagName("head").Cast<HTMLHeadElement>().First();
var script = (IHTMLScriptElement)doc.createElement("script");
script.text =
"javascript:window.onbeforeunload = function () { window.external.Close(); }";
head.appendChild((IHTMLDOMNode)script);
}
Похоже, у вас есть веб-страница, которую вы открываете, поэтому вот что вы можете сделать:
1.- Добавьте элемент управления Popup в свое окно и добавьте в него элемент управления WebBrowser, вы будете использовать его для перехода на свою страницу:
<Button Content="Button" Click="button1_Click" />
<Popup x:Name="PopUp" Width="300" Height="300">
<WebBrowser x:Name="webBrowser">
</WebBrowser>
</Popup>
2.- Создайте новый класс и добавьте к нему атрибут [ComVisible (true)]. Он должен содержать ссылку на ваш объект управления Popup. Добавьте открытый метод в ваш новый класс, который скрывает элемент управления Popup.
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Controls.Primitives;
[ComVisible(true)]
public class ScriptHandler
{
private Popup popup;
public ScriptHandler(Popup popup)
{
this.popup = popup;
}
public void Close()
{
this.popup.IsOpen = false;
}
}
3.- Установите для свойства ObjectForScripting элемента управления WebBrowser экземпляр вашего нового класса.
public partial class MainWindow : Window
{
private ScriptHandler scriptHandler;
public MainWindow()
{
InitializeComponent();
this.scriptHandler = new ScriptHandler(this.PopUp);
this.webBrowser.ObjectForScripting = this.scriptHandler;
}
// Shows the pop up and navigates to your page
private void button1_Click(object sender, RoutedEventArgs e)
{
this.webBrowser.Navigate("http://localhost:56977/PopUp.htm");
this.PopUp.IsOpen = true;
}
}
4.- Так как вы зарегистрировали объект ScriptHandler с помощью элемента управления WebBrowser, все открытые методы в этом классе могут быть доступны из javascript, добавьте метод javascript на свою страницу (вам может потребоваться проверить «неопределенную» проверку, которую я делаю ) который вызывает метод Close в вашем классе ComVisible:
<script type="text/javascript">
function CloseMe()
{
if(window.external != null && window.external.CloseMe != 'undefined')
{
window.external.Close();
}
}
</script>
5.- Добавьте ссылку, которая вызывает javascript метод CloseMe на вашу страницу:
<a href='javascript:CloseMe()'>Close Me</a>
Как вы, вероятно, уже поняли, это решение будет работать не только с элементом управления Popup, вы также можете создать новое окно и закрыть его, утилизировать элемент управления WeBrowser и т. Д. Или просто показать / скрыть другой тип элемента управления.