Silverlight控件开发—偷拿别人的Html控件还支持中文哦。
需求:大家都现有MS提供的HTML控件只能在OOB模式下使用,而第三方的控件如要在非OOB下使用则需设置windowsless等于true,我们知道windowsless等于true对性能是有影响的,还有个特大的bug就是不能输入中文。
现在我们需要的是是在非OOB下的HTML控件,并且支持中文输入无需设置windowsless等于true。
好吧下面我们开始吧:去年的在深蓝色右手群里有位叫“超人”的哥们说DIV的方式,Silverlihgt在html中作为插件显示。我们可以在html中建立一个DIV 覆盖在Silverlight的上方。这样我们就能输入中文了。今天我们这里也是这样的方式实现的。
以下代码是去年从某地反编译过来,然后稍作修改的。具体哪里也忘了。下面我们简单分析下代码:
我们先定义Uri属性,指定显示某个Uri的html
1:
2: /// <summary>
3: /// 设置Uri的依赖属性,并且定义Uri改变时事件SourceUriChanged
4: /// </summary>
5: public static readonly DependencyProperty SourceUriProperty =
6: DependencyProperty.Register("SourceUri", typeof(Uri), typeof(HTMLControl),
7: new PropertyMetadata(null, new PropertyChangedCallback(HTMLControl.SourceUriChanged)));
8:
9:
10: /// <summary>
11: /// 指定显示的Uri
12: /// </summary>
13: public Uri SourceUri
14: {
15: get
16: {
17: return (Uri)base.GetValue(SourceUriProperty);
18: }
19: set
20: {
21: base.SetValue(SourceUriProperty, value);
22: }
23: }
下面是当Uri改变时候触发的事件,大致原理为:
1.获取Sl所属页面在页面中增加一个Div元素
2.调整Div元素所处位置以及长宽高。让它刚好处于Sl控件位置
3.Refresh方法主要调整位置以及长宽高
1: private static void SourceUriChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
2: {
3: ((HTMLControl)sender).ReloadUri();
4: }
5:
6: private void ReloadUri()
7: {
8: if (!HtmlPage.IsEnabled)
9: {
10: return;
11: }
12: if (!this.isLoad)
13: {
14: return;
15: }
16:
17: if (this.div.Children.Count > 0)
18: {
19: while (div.Children.Count>0)
20: {
21: this.div.RemoveChild((HtmlElement)this.div.Children[0]);
22: }
23: }
24:
25: if (this.SourceUri == null)
26: {
27: //直接设置SourceHtml 未设置Uri
28: this.div.SetStyleAttribute("overflow", "auto");
29: this.SetDivHtml(this.div, this.SourceHtml);
30: //这里刷新Html,并且创建Div
31: this.Refresh();
32: }
33: else
34: {
35: //通过URL设置
36: this.div.SetStyleAttribute("overflow", "hidden");
37: this.div.AppendChild(this.IFrame);
38: this.IFrame.SetAttribute("src", this.SourceUri.ToString());
39: //这里刷新Html
40: this.Refresh();
41:
42: }
43: }
上面控件只能在非OOB模式下使用,因为在OOB模式下无法创建Div,HtmlPage等对象访问也会报错(题外话:真不明白为啥默认建的SL项目App.xaml.cs中会用到HtmlPage对象)。所以要在OOB运行的时候朋友们可以使用MS的WebBrowser控件。
不多说了全部代码下载点击这里,有兴趣的朋友可以研究研究。
今天在Windows live Write上下了个代码样式,以前的代码都么样式,哈忒高兴。
再祝大家妇女节快乐(公司女人都放假了)。
出处: http://www.cnblogs.com/ForrestZhang
为了保证作者的创造热情,转载须保留此声明,并注明在文章起始位置给出原文链接。
如果您觉得写的不错,麻烦点下推荐。
posted on 2011-03-08 15:41 Mr.Wrong居然被人用了 阅读(3463) 评论(16) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?