这应该是一项简单的任务。我正在尝试创建一个WPF应用程序,它将在单击按钮时旋转WebBrowser及其Web渲染。理想情况下,这就是我想要的:
完成任务;以下是我的代码:
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;
}
}
}
运行代码时,尺寸只会改变,而不是实际渲染。这是我得到的输出:
正如您所看到的,尺寸已更改但实际网页未更改。以下是我已经检查过的链接:
Upside down browser in WPF application
Rotate Windows form upside down
此外,如果它是标签/图像/画布,它将旋转尺寸并显示旋转整个对象。任何帮助深表感谢。
P.S。系统配置:
Windows 7
Visual Studio 2012
.Net Framework 4.5
答案 0 :(得分:2)
你尝试做的方式就行不通。 RenderTransform
是WPF概念,但WebBrowser
控件不使用WPF渲染管道。在引擎盖下,它只是一个Internet Explorer窗口。就像WindowsFormsHost
一样,它在WPF显示的顶部覆盖了一个不同的窗口对象,并且没有WPF属性可以以任何方式影响其内容。
如果要旋转网页内容,则必须说服IE执行此操作。它不是完美的,但你应该能够非常接近,具体取决于你想要显示的内容。我能想到的最简单的解决方案是使用CSS转换,因此我们将向页面注入样式表。
首先,您必须添加对MSHTML(IE的渲染引擎)的引用。这是一个COM参考:
然后,您将必须处理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); }";
}
这是我得到的结果:
答案 1 :(得分:0)
旋转网络浏览器看起来比人们想象的更有问题,所以事实上,如果你需要旋转网页浏览器,你需要使用Awesomium