フォーラムの利用は初めてですので、不備等ありましたら申し訳ありません。
●起こっていること
WPF(C#)にて、WebBrowserコントロール内にPDFを表示したいです。
MainWindowでボタンをクリックするとSubWindowが立ち上がり、そのSubWindowがPDF表示用のWebBrowserを持っています。
状況再現用に切り分けて作成したプログラムですが、確認したところ基本的には正しく動作しました。
しかし実行環境によっては、WebBrowserで「Webページへのナビゲーションは取り消されました」と表示され、マシン上で設定している既定のPDFビューア(Adobe AcrobatやEdge)が起動し、そちらでPDFを開いてしまうことがあります。
●質問
構想上、このアプリケーションを操作している状況ではWPFのみで完結させたいのですが、なにか外部アプリケーションを開いてしまう原因となるような点がありましたらご教示いただけますでしょうか。
WPF側で何か制御できる方法があれば、と思い質問していますが、Windowsの設定や既定のPDFビューアによる設定でしか制御不可能なのであれば考えを見直そうと思います。。。(その際の別の方法等もご存知であれば力をお貸しください)
●環境
[WebBrowser内でのPDF表示に成功]
・Windows 10 Home(64bit)
・Microsoft VisualStudio Community 2017 ver:15.8.6
・Microsoft .NET Framework4.7
・Adobe Acrobat Pro DC(Continuous)
以下、グレー枠で表示しているものがSubWindow(WebBrowserコントロール)です。
![]()
[WebBrowser内でのPDF表示に失敗]
・Windows 10 Pro(64bit)
・Microsoft VisualStudio Community 2017 ver:15.7.1
・Microsoft .NET Framework4.7
・Adobe Acrobat X Pro ver:10.0.16
同じく、グレー枠で表示しているものがSubWindow(WebBrowserコントロール)です。
![]()
●ソースコード
以下、C#でのソースコードになります。
MainWindow.xaml
<Window x:Class="Sample01.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Sample01"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800" Closed="Window_Closed"><Grid><Button x:Name="GotoSub_btn" Content="SubWindowを表示" Width="210" Height="40" Click="GotoSub_Click"/></Grid></Window>
MainWindow.xaml.cs
using System;
using System.Windows;
namespace Sample01
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void GotoSub_Click(object sender, RoutedEventArgs e)
{
SubWindow sw = new SubWindow();
sw.Owner = this;
sw.Show();
sw.navi();
}
private void Window_Closed(object sender, EventArgs e)
{
Application.Current.Shutdown();
}
}
}
SubWindow.xaml
<Window x:Class="Sample01.SubWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Sample01"
mc:Ignorable="d" ResizeMode="NoResize" WindowStyle="None"
Title="SubWindow" BorderBrush="#FF606060" BorderThickness="3"><Grid x:Name="grid01" Background="#FFAAAAAA"><WebBrowser x:Name="webBrowser"/></Grid></Window>
SubWindow.xaml.cs
using System;
using System.Reflection;
using System.Windows;
namespace Sample01
{
/// <summary>
/// SubWindow.xaml の相互作用ロジック
/// </summary>
public partial class SubWindow : Window
{
public SubWindow()
{
InitializeComponent();
}
public void navi()
{
Assembly mainAssembly = Assembly.GetExecutingAssembly();
String appDir = System.IO.Path.GetDirectoryName(mainAssembly.Location);
String source = appDir + "\\PDF素材\\samplePDF.pdf";
webBrowser.Navigate(new Uri(source + "#toolbar=0&navpanes=0&scrollbar=0&page=1&view=Fit"));
}
}
}