现在我们需要的是是在非OOB下的HTML控件,并且支持中文输入无需设置windowsless等于true。
好吧下面我们开始吧:去年的在深蓝色右手群里有位叫“超人”的哥们说DIV的方式,Silverlihgt在html中作为插件显示。我们可以在html中建立一个DIV 覆盖在Silverlight的上方。这样我们就能输入中文了。今天我们这里也是这样的方式实现的。
以下代码是去年从某地反编译过来,然后稍作修改的。具体哪里也忘了。下面我们简单分析下代码:
我们先定义Uri属性,指定显示某个Uri的html
- ///
- /// 设置Uri的依赖属性,并且定义Uri改变时事件SourceUriChanged
- ///
- public static readonly DependencyProperty SourceUriProperty =
- DependencyProperty.Register("SourceUri", typeof(Uri), typeof(HTMLControl),
- new PropertyMetadata(null, new PropertyChangedCallback(HTMLControl.SourceUriChanged)));
- ///
- /// 指定显示的Uri
- ///
- public Uri SourceUri
- {
- get
- {
- return (Uri)base.GetValue(SourceUriProperty);
- }
- set
- {
- base.SetValue(SourceUriProperty, value);
- }
- }
下面是当Uri改变时候触发的事件,大致原理为:
1.获取Sl所属页面在页面中增加一个Div元素
2.调整Div元素所处位置以及长宽高。让它刚好处于Sl控件位置
3.Refresh方法主要调整位置以及长宽高
- private static void SourceUriChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
- {
- ((HTMLControl)sender).ReloadUri();
- }
- private void ReloadUri()
- {
- if (!HtmlPage.IsEnabled)
- {
- return;
- }
- if (!this.isLoad)
- {
- return;
- }
- if (this.div.Children.Count > 0)
- {
- while (div.Children.Count>0)
- {
- this.div.RemoveChild((HtmlElement)this.div.Children[0]);
- }
- }
- if (this.SourceUri == null)
- {
- //直接设置SourceHtml 未设置Uri
- this.div.SetStyleAttribute("overflow", "auto");
- this.SetDivHtml(this.div, this.SourceHtml);
- //这里刷新Html,并且创建Div
- this.Refresh();
- }
- else
- {
- //通过URL设置
- this.div.SetStyleAttribute("overflow", "hidden");
- this.div.AppendChild(this.IFrame);
- this.IFrame.SetAttribute("src", this.SourceUri.ToString());
- //这里刷新Html
- this.Refresh();
- }
- }
上面控件只能在非OOB模式下使用,因为在OOB模式下无法创建Div,HtmlPage等对象访问也会报错(题外话:真不明白为啥默认建的SL项目App.xaml.cs中会用到HtmlPage对象)。所以要在OOB运行的时候朋友们可以使用MS的WebBrowser控件。
当前文章:Silverlight开发之偷拿别人HTML控件
标题来源:http://www.shufengxianlan.com/qtweb/news17/390617.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联