Webbrowser
是WPF臭名昭着的窮人,並與它的交互是不是更好。如果你可以避免使用它,我強烈建議避免它。
當我不得不使用它時,通常我會通過JavaScript進行所有交互。我將在由Webbrowser
服務的頁面上設置JavaScript函數,並從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
函數以直接訪問它。
第二個dropdownlist dosnt有任何id?或名字?我想它有一個像dropdown2這樣的名字。所以你只需要添加與其他ID相同的代碼。 Webbrowser1.document.getelementbyid(「dropdown2」)。setattribute(「Value」,「1」) – samy
@samy是第二個dropdownlist也有一個像dropdown2這樣的id,但是如果單擊第一個dropdown2,不能這樣做自動。如果你使用的代碼,你告訴我它不會功能,因爲沒有價值1 – Gjavado
這是一個猜測!你說這個工作只有當你點擊第一個下拉列表。所以你可以像這樣調用click方法:'Webbrowser1.document.getelementbyid(「dropdown1」)。InvokeMember(「click」);''或者那個嘗試的instad' Webbrowser1.Document.GetElementById(「dropdown1」)。 ;' – samy