Webbrowser
WPF は悪名高いほど貧弱であり、それとの相互作用はそれほど良くありません。使用を避けることができる場合は、使用しないことを強くお勧めします。
いじる必要があるときは、通常、すべてのやり取りを JavaScript で行います。によって提供されるページに JavaScript 関数を設定しWebbrowser
、WPF コードから呼び出します。このようにして、すべての DOM 対話は Web ページ自体によって行われます。
このシナリオでは、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" });
}
}
サンプル コードは 2 番目のドロップダウンを変更していませんが、JavaScript から直接 DOM と対話しているため、簡単にアクセスできます。selectOption
たとえば、関数を拡張して直接アクセスすることができます。