WPF 是出了名的Webbrowser
差,与它的交互也没有任何改善。如果您可以避免使用它,我强烈建议您避免使用它。
当我不得不处理它时,我通常通过 JavaScript 进行所有交互。我将在由 提供的页面上设置一个 JavaScript 函数,Webbrowser
并从 WPF 代码中调用它。这样所有的 DOM 交互都是由网页本身完成的。
在这种情况下,您将拥有类似于以下内容的 HTML:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
function selectOption(param)
{
if (param == "value3") {
var combo1 = document.getElementById("dropdown1");
combo1.value = 3;
}
}
</script>
</head>
<body>
<form>
<select name="dropdown1" id="dropdown1">
<option value="1">test 1</option>
<option value="2">test 2</option>
<option value="3">test 3</option>
</select>
<select name="dropdown2" id="dropdown2">
<option value="a">test a</option>
<option value="b">test b</option>
</select>
</form>
</body>
</html>
XAML:
<Window x:Class="StackOverflowWorkbench.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<Button Click="Button_Click_1" Content="Click Me!" />
<WebBrowser Name="MyBrowser" />
</StackPanel>
</Window>
XAML.CS:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyBrowser.Navigate(Directory.GetCurrentDirectory() + "/HTMLPage1.html");
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
MyBrowser.InvokeScript("selectOption", new String[] { "value3" });
}
}
示例代码仍然没有更改第二个下拉菜单,但是因为您现在直接从 JavaScript 与 DOM 交互,所以您可以轻松访问它。例如,您可以扩展该selectOption
函数以直接访问它。