WPF WebBrowser C #Windows不会旋转渲染

时间:2016-05-19 00:49:03

标签: c# wpf windows-7

这应该是一项简单的任务。我正在尝试创建一个WPF应用程序,它将在单击按钮时旋转WebBrowser及其Web渲染。理想情况下,这就是我想要的:

原创浏览器: 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

旋转浏览器: 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。系统配置:

Windows 7

Visual Studio 2012

.Net Framework 4.5

2 个答案:

答案 0 :(得分:2)

你尝试做的方式就行不通。 RenderTransform是WPF概念,但WebBrowser控件不使用WPF渲染管道。在引擎盖下,它只是一个Internet Explorer窗口。就像WindowsFormsHost一样,它在WPF显示的顶部覆盖了一个不同的窗口对象,并且没有WPF属性可以以任何方式影响其内容。

如果要旋转网页内容,则必须说服IE执行此操作。它不是完美的,但你应该能够非常接近,具体取决于你想要显示的内容。我能想到的最简单的解决方案是使用CSS转换,因此我们将向页面注入样式表。

首先,您必须添加对MSHTML(IE的渲染引擎)的引用。这是一个COM参考:

Reference MSHTML

然后,您将必须处理Navigated事件:

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

答案 1 :(得分:0)

旋转网络浏览器看起来比人们想象的更有问题,所以事实上,如果你需要旋转网页浏览器,你需要使用Awesomium