2016-05-19 10 views
2

これは単純な作業であると考えられていました。私はWebBrowserを回転させるWPFアプリケーションを作成しようとしており、ボタンをクリックするとWebレンダリングが行われます。だから、理想的には、これは私が欲しいものです:WPF WebBrowser C#Windowsはレンダリングを回転しません

オリジナルブラウザ: enter image description here

回転したブラウザ: enter image description here

タスクを達成するために、以下は私のコードです:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace TestClawCam 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     int height = 480; 
     int width = 640; 
     public MainWindow() 
     { 
      InitializeComponent(); 
      clawCam1.Source= new Uri("http://google.com"); 
      clawCam1.Width = width; 
      clawCam1.Height = height; 


     } 

     private void rotateButton_Click(object sender, RoutedEventArgs e) 
     { 
      RotateTransform myTransform = new RotateTransform(); 
      myTransform.Angle = 90; 
      clawCam1.RenderTransform = myTransform; 

     } 
    } 
} 

実際にレンダリングされるのではなく、寸法が変化しているだけです。

オリジナルブラウザ: enter image description here

回転したブラウザ:これは私が取得しています出力されますが変更さ寸法ではなく、実際のWebページを見ることができるように enter image description here

Rotating webbrowser from current orientation is stretching(zooming) the webbrowser contents Windows phone

Upside down browser in WPF application

Rotate Windows form upside down

をまた、それはラベル/画像/キャンバスであれば、それは寸法を回転させ、全体を回転して見えるでしょう:以下は、私はすでに確認されているリンクですオブジェクト。どんな助けでも大歓迎です。

P.S. Webブラウザを回転

のWindows 7

のVisual Studio 2012

の.NET Framework 4.5

答えて

2

あなたがしようとしている方法は、ちょうど動作しません。 RenderTransformはWPFの概念ですが、WebBrowserコントロールはWPFレンダリングパイプラインを使用しません。フードの下では、Internet Explorerのウィンドウです。 WindowsFormsHostのように、WPFディスプレイの上にの異なるウィンドウオブジェクトをオーバーレイします。WPFプロパティはどのような方法でもコンテンツに影響を与えません。

ウェブコンテンツをローテーションしたい場合は、IEにそのことを納得させる必要があります。それは完璧ではありませんが、あなたが表示したい内容に応じてきれいに閉じることができます。私が考えることができる最も簡単な解決策は、CSS変換を使用することです。そのため、ページにスタイルシートを挿入します。

まず、IEのレンダリングエンジンであるMSHTMLへの参照を追加する必要があります。

Reference MSHTML

その後、あなたはNavigatedイベントを処理する必要があります:それは、COMの参照です

clawCam1.Navigated += OnNavigated; 

そして、あなたは、イベントハンドラ内で汚い仕事を:

private void OnNavigated(object sender, System.Windows.Navigation.NavigationEventArgs e) 
{ 
    var doc = clawCam1.Document as HTMLDocument; 
    if (doc == null) 
     return; 

    var css = doc.createStyleSheet(string.Empty, 0); 
    css.cssText = "body { transform: rotate(90deg); }"; 
} 

結果は次のとおりです。

Result

+0

ありがとう、それは働いた:) – PseudoAj

+0

OnNavigatedは現在のコンテキストに存在しません。このエラーをクリアするためにどの参照を追加する必要がありますか。 @PseudoAj –

+0

@arund 'OnNavigated'は私が答えに書いた関数です。クラスに追加するだけです。 –

0

実際にはそうでもないLayoutTransform NORE RenderTransform DO仕事、人は考えることができるよりも多くの問題に見える、場合:システムの構成あなたはあなたが使用する必要があるWebブラウザを回転する必要がありますAwesomium

+0

返信いただきありがとうございます。同じことをしてください。コードを試しましたか?はいの場合は動作していますか?はいの場合、システム設定は何ですか? – PseudoAj

+0

更新を参照してください – Hasson

+0

あなたの努力に感謝します。私はそれを達成するためにクロムプラグインを認識していますが、私はネイティブソリューションを探しています。私はこれをいくつかのシステムに配備されたより大きなプロジェクトに必要としています。 – PseudoAj

関連する問題