Silverlight4里面嵌入html页面或者asp.net(jsp)控件实现
来源:互联网 发布:ps手绘软件 编辑:程序博客网 时间:2024/05/23 17:07
说明: 项目利用HtmlPage和WebBrowser实现了oob和非oob模式下现实html页面的现实。不用使用windowless=true模式。
问题:浏览器有滚动条的话,你拖动它,html页面也会动,还有就是你点击silverlight页面,html页面就会影藏,其实也是跑到silverlight页面后面。不知道如何解决。
控件实现
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:SlAndHtml"> <Style TargetType="local:HtmlControl" > <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="local:HtmlControl"> <Grid x:Name="Root" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}"> <WebBrowser x:Name="WebBrowserOOB" Source="{TemplateBinding NavigationUrl}"></WebBrowser> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style></ResourceDictionary>
/* * 软件: sl和html混合显示测试项目 * 说明: 实现了oob下和非oob下html页面的显示功能 * 问题: 当控件被点击后在选择sl控件,控件显示的html就看不见了非oob模式下 * 创建者: Jake Tina * 创建日期: 2011年11月30日 * 创建版本: Ver 0.01 * 修改人: (每次修改请在这里追加,并修改最终版本号。) * 修改日期: * 修改内容: * 修改版本: * */using System;using System.ComponentModel;using System.Threading;using System.Windows;using System.Windows.Browser;using System.Windows.Controls;using System.Windows.Media;namespace SlAndHtml{ public partial class HtmlControl : ContentControl { private int _htmlControlLeft = 0; private int _htmlControlTop = 0; private double _width = 0; private double _height = 0; private readonly int _htmlZIndex = 1; private Scrol _scrolling; private readonly string _htmlControlId = System.Guid.NewGuid().ToString(); public static readonly DependencyProperty NavigationUrlProperty = DependencyProperty.Register("NavigationUrl", typeof(Uri), typeof(HtmlControl), null); private Thread _thread = null; /// <summary> /// OOB下面使用 /// </summary> private WebBrowser webBrowser = null; private HtmlElement divIFrameHost; /// <summary> /// 获取当前控件的编号 /// </summary> public String HtmlControlId { get { return _htmlControlId; } } /// <summary> /// 获取或设置网页地址 /// </summary> public Uri NavigationUrl { get { return new Uri(Convert.ToString(GetValue(NavigationUrlProperty))); } set { SetValue(NavigationUrlProperty, value); } } /// <summary> /// 设置是否有滚动条 /// </summary> public Scrol HtmlScrolling { get { return _scrolling; } set { _scrolling = value; } } public HtmlControl() { if (Application.Current.IsRunningOutOfBrowser) { DefaultStyleKey = typeof(HtmlControl); } else { Loaded += new RoutedEventHandler(HtmlControl_Loaded); } } public override void OnApplyTemplate() { base.OnApplyTemplate(); } void HtmlControl_Loaded(object sender, RoutedEventArgs e) { //MessageBox.Show(this.Parent.ToString()); //如果是设计模式忽略下面的代码 if (DesignerProperties.GetIsInDesignMode(this)) { return; } if (!Application.Current.IsRunningOutOfBrowser) { HtmlElement element = HtmlPage.Document.GetElementById("_silverlightControlHost"); element.SetAttribute("windowless", "true"); UpdateSize(); Loaded -= new RoutedEventHandler(HtmlControl_Loaded); } } public void InitializeComponent() { HtmlDocument doc = HtmlPage.Document; divIFrameHost = doc.CreateElement("div"); divIFrameHost.SetStyleAttribute("position", "absolute"); divIFrameHost.SetAttribute("id", System.Guid.NewGuid().ToString()); divIFrameHost.SetStyleAttribute("height", string.Format("{0}px", _height - 5)); divIFrameHost.SetStyleAttribute("width", string.Format("{0}px", _width - 5)); divIFrameHost.SetStyleAttribute("left", string.Format("{0}px", _htmlControlLeft)); divIFrameHost.SetStyleAttribute("top", string.Format("{0}px", _htmlControlTop)); divIFrameHost.SetStyleAttribute("z-index", _htmlZIndex.ToString()); divIFrameHost.AppendChild(CreateIFrameControl(doc)); doc.Body.AppendChild(divIFrameHost); } private HtmlElement CreateIFrameControl(HtmlDocument doc) { HtmlElement iFrame = doc.CreateElement("IFRAME"); iFrame.SetAttribute("src", NavigationUrl.AbsolutePath); iFrame.SetStyleAttribute("height", "100%"); iFrame.SetStyleAttribute("width", "100%"); iFrame.SetStyleAttribute("left", "0px"); //iFrame.SetStyleAttribute("position", "fixed"); iFrame.SetAttribute("frameborder", "0"); iFrame.SetAttribute("display", "inline"); iFrame.SetAttribute("allowTransparency", "true"); iFrame.SetStyleAttribute("top", "0px"); iFrame.SetAttribute("scrolling", _scrolling.ToString()); iFrame.Id = System.Guid.NewGuid().ToString(); return iFrame; } private void UpdateSize() { _thread = new Thread(new ThreadStart(SizeUpate)); _thread.Start(); } private void SizeUpate() { this.Dispatcher.BeginInvoke(() => { while (true) { GeneralTransform gt = this.TransformToVisual(Application.Current.RootVisual as UIElement); Point offset = gt.Transform(new Point(0, 0)); double x = offset.X; double y = offset.Y; this._width = this.ActualWidth; this._height = this.ActualHeight; if (x <= 0 && y <= 0) { continue; } else { _htmlControlLeft = (int)x; _htmlControlTop = (int)y; InitializeComponent(); _thread = null; break; } } }); } } public enum Scrol { No, Yes }}
控件使用
<my:HtmlControl Grid.Row="2" x:Name="htmlcon" NavigationUrl="http://www.baidu.com" />
- Silverlight4里面嵌入html页面或者asp.net(jsp)控件实现
- 如何在ASP.NET页面中嵌入WINFORM控件一
- ASP.NET : 为服务器控件或者页面添加异步行为
- ASP.NET里面嵌入javascript代码示例
- asp.net里面页面定位
- ASp.net 生成页面,服务器控件对应html标签
- jsp里面嵌入JavaScript
- ASP.NET页面嵌入视频播放
- asp.net中嵌入日历控件代码
- jsp或者html页面编码格式更改
- JSP GridView --使用自定义标签实现ASP.NET的控件
- asp.net在Render中加载Html来动态生成或者修改页面
- ASP.NET在RENDER中加载HTML来动态生成或者修改页面
- ASP.NET生成HTML页面
- asp.net输出Html页面
- ASP.NET 页面控件遍历实现(转载+修改)
- ASP.NET 页面控件遍历实现(转载+修改)
- JavaScript脚本语言简介及如何嵌入html/jsp页面
- \lib\klist.c
- Win7安装英文语言包(图文)
- lookupfile 在新标签中打开文件
- socket --------tcp/ip
- vim自动补全‘(’。。。
- Silverlight4里面嵌入html页面或者asp.net(jsp)控件实现
- 评教系统背景分析
- Android网络加载时显示进度条
- [转].NET Framework 3.0新特性
- 如何配置多个Buffer Pools
- 做技术的是不是很胆小?
- assert用法总结
- 图片上传事件
- CMD【网络命令大全】