Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否可以在Web浏览器控件上呈现Silverlight元素(在OOB模式下)

是否可以在Web浏览器控件上呈现Silverlight元素(在OOB模式下)
EN

Stack Overflow用户
提问于 2012-09-13 10:52:42
回答 1查看 983关注 0票数 0

我希望能够使用其他Silverlight元素和各种转换来隐藏和显示Web浏览器控件。

任何Web浏览器控件似乎总是最后呈现在页面上。有没有办法让其他元素在Web浏览器上呈现?

下面是一个最小的XAML示例来说明这个问题:

代码语言:javascript
运行
AI代码解释
复制
<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="BrowserSilverlightApplication.MainPage"
    Width="640" Height="480">
    <Grid x:Name="LayoutRoot" Background="White">
        <WebBrowser x:Name="webBrowser" Margin="16" Loaded="WebBrowser_Loaded"/>
        <Rectangle Fill="#447171DE" Margin="8" Stroke="Black" IsHitTestVisible="False" StrokeThickness="0">
            <Rectangle.Effect>
                <BlurEffect Radius="18"/>
            </Rectangle.Effect>
        </Rectangle>
    </Grid>
</UserControl>
EN

回答 1

Stack Overflow用户

发布于 2012-09-22 08:21:48

随着Silverlight4.0的发布,引入了WebBrowser控件。但是,它只被设计用于“浏览器外”的应用程序中。然而,随着Silverlight 5的发布,该控件也可以在“浏览器内”可信应用程序中使用。

自从在Silverlight中引入WebBrowser控件以来,许多开发人员一直在使用它在应用程序中显示HTML内容。但是,主要的限制是“空域”问题。

在应用程序窗口中,窗口内的每个像素恰好只属于一个HWND,这构成了该HWND的空域。HWND只能在属于它的那些像素上渲染。

在典型的Silverlight OOB应用程序中,将只有一个Silverlight-HWND。因此,Silverlight应用程序中的所有像素都属于该HWND,这构成了该HWND的空域。

但是,在我们的场景中,当我们在Silverlight OOB应用程序中引入WebBrowser控件时,空域由WebBrowser控件的HWND共享。这就是所谓的空域问题。

WebBrowser控件所在的像素将属于WebBrowser-HWND。因此,Silverlight将无法在属于其他HWND的像素上渲染任何内容。

这个问题是因为;Silverlight中可用的WebBrowser控件是“System.Windows.Controls.WebBrowser”控件的包装。另一个Silverlight控件不会为自己创建新窗口;相反,它将在单个HWND下创建。WebBrowser控件不是真正的Silverlight控件,而是Windows HTML控件的包装。这些本机控件将创建自己的HWND。

因此,WebBrowser控件始终与应用程序中的其他控件重叠。例如,当使用具有固定标题和滚动功能的页时,或者当WebBrowser控件被置于menu控件下时。可能还有其他的例子。

通过使用“WebBrowserBrush”,我们可以克服这个问题。

WebBrowserBrush是随WebBrowser控件一起引入的,它们旨在协同工作以显示丰富的HTML内容。

WebBrowserBrush是一种画笔对象,用于绘制包含HTML内容的区域。此内容由WebBrowser控件提供。就像其他画笔类型一样,你可以使用WebBrowserBrush来填充矩形,路径的几何内容等等。

那么,这个笔刷将如何帮助我们解决这个问题呢?

要解决此问题,您可以隐藏WebBrowser,并使用WebBrowserBrush用WebBrowser中的HTML内容绘制该区域。WebBrowserBrush将在与其他控件相同的层中绘制HTML内容,并允许在其上方显示其他控件。我们可以在需要时显示WebBrowser控件。我们需要考虑的唯一一件事就是找到一个合适的事件来处理这个逻辑。

在下面的示例应用程序中,我希望我的组合框列表在打开时呈现在WebBrowser之上。我使用了ComboBox_DropDownChanged事件来处理逻辑。当列表打开时,我隐藏WebBrowser控件并用WebBrowserBrush绘制区域。然后,当列表关闭时,我将控件带回来。

代码语言:javascript
运行
AI代码解释
复制
> <UserControl x:Class="SilverlightApplication1_WebBrowser.MainPage"    
> xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
> xmlns:d="http://schemas.microsoft.com/expression/blend/2008"    
> xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
> <Grid x:Name="LayoutRoot" Background="White"
> HorizontalAlignment="Stretch" VerticalAlignment="Stretch">        
> <Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch">    
> <Grid HorizontalAlignment="Stretch"  VerticalAlignment="Stretch">     
> <Grid.RowDefinitions>                     <RowDefinition Height="50"
> />                     <RowDefinition Height="50" />                  
> <RowDefinition Height="Auto" />                 </Grid.RowDefinitions>
> <Grid.ColumnDefinitions>                     <ColumnDefinition
> Width="*"/>                     <ColumnDefinition Width="50"/>        
> </Grid.ColumnDefinitions>                                  <ComboBox
> Canvas.ZIndex="10" Grid.Row="0" x:Name="cbTestList"                   
> DropDownOpened="cbTestList_DropDownOpened"
> DropDownClosed="cbTestList_DropDownClosed" >                    
> <ComboBox.Items>                         <ComboBoxItem Content="--
> Select --" IsSelected="True"/>                         <ComboBoxItem
> Content="Text1"/>                         <ComboBoxItem
> Content="Text2"/>                         <ComboBoxItem
> Content="Text3"/>                         <ComboBoxItem
> Content="Text4"/>                         <ComboBoxItem
> Content="Text5"/>                         <ComboBoxItem
> Content="Text6"/>                         <ComboBoxItem
> Content="Text7"/>                         <ComboBoxItem
> Content="Text8"/>                         <ComboBoxItem
> Content="Text9"/>                         <ComboBoxItem
> Content="Text10"/>                         <ComboBoxItem
> Content="Text11"/>                         <ComboBoxItem
> Content="Text12"/>                         <ComboBoxItem
> Content="Text13"/>                         <ComboBoxItem
> Content="Text14"/>                         <ComboBoxItem
> Content="Text15"/>                     </ComboBox.Items>              
> </ComboBox>                                                           
> <WebBrowser x:Name="wb" Height="500" Width="800" Grid.Column="0"
> Grid.ColumnSpan="2" Grid.Row="2"                             
> Canvas.ZIndex="0" HorizontalAlignment="Stretch"                       
> VerticalAlignment="Stretch" />                                 
> <TextBox x:Name="txtUrl" Margin="10" Grid.Row="1" Grid.Column="0"     
> Canvas.ZIndex="10"/>                   <Button Grid.Column="1"
> Grid.Row="1" Margin="10" Canvas.ZIndex="10" Content="Go"              
> Name="btnLoadContent" Click="btnLoadContent_Click" />                 
> <Rectangle Grid.Column="0" Height="500" Width="800"
> Grid.ColumnSpan="2" Grid.Row="2"                             
> HorizontalAlignment="Stretch"                             
> VerticalAlignment="Stretch">                     <Rectangle.Fill>     
> <WebBrowserBrush SourceName="wb" x:Name="WBB1"/>                    
> </Rectangle.Fill>                 </Rectangle>             </Grid>    
> </Canvas>     </Grid> </UserControl>

虽然我们能够通过使用WebBrowser控件和WebBrowserBrush来克服这个问题,但是我们仍然有一些需要考虑的限制。

1.用户无法与WebBrowserBrush交互。

2.除非重新绘制,否则WebBrowser控件中的更改不会自动反映。

这是一个解决问题的简单方法,如果设计得当,考虑到我们的限制,它将会工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12404604

复制
相关文章
判断元素是否在视窗之内
作为一名前端工程师我们经常需要判断目标元素是否在视窗之内或者和视窗的距离小于一个值(例如 100 px),从而实现一些常用的功能,例如:
IMWeb前端团队
2019/12/04
2.1K0
[Silverlight 4 RC]WebBrowser概览
WebBrowser控件提供了当silverlight应用运行在OOB(out of browser)模式时,在silverlight内部呈现html的功能。 WebBrowser控件只能运行在OOB模式下,若是在浏览器中查看。他就是会显示一个和WebBrowser控件大小相等的矩形区域。 <grid x:name="LayoutRoot" background="White"> <webbrowser source="http://localhost:8238/HTMLPage1.html"
用户1172164
2018/01/16
9340
Go 判断元素是否在切片中
如何判断元素是否在切片中,Golang 并没有提供直接的库函数来判断,最容易想到的实现便是通过遍历来判断。
恋喵大鲤鱼
2021/12/06
10.3K0
Go 判断元素是否在切片中
近期codeplex上的Silverlight开源控件
http://silverlightdragdrop.codeplex.com/ 一个对元素拖放控制的项目。 http://sl2videoplayer.codeplex.com/ Silverlight的媒体播放器。 http://silverlightfileupld.codeplex.com/ 上传控件。 http://DeepZoomContainer.codeplex.com/ DeepZoom控件,包含了更多的功能。 http://silverlightcairngorm.codepl
用户1172164
2018/03/01
8670
准确判断一个 WPF 控件 / UI 元素当前是否显示在屏幕内
你的 WPF 窗口是可以拖到屏幕外面去的,所以拉几个元素到屏幕外很正常。你的屏幕可能有多个。你的多个屏幕可能有不同的 DPI。你检测的元素可能带有旋转。
walterlv
2023/10/22
7690
准确判断一个 WPF 控件 / UI 元素当前是否显示在屏幕内
检查 Flutter 应用程序是否在 Web 上运行(书籍推荐)
您可以使用基础kIsWeb常量检查您的 Flutter 应用程序是否在 Web 浏览器上运行。
徐建国
2022/03/30
1.8K0
检查 Flutter 应用程序是否在 Web 上运行(书籍推荐)
为什么同样的WPF控件在不同的电脑上呈现外观不一致
今天有同事跑过来说遇到了一个奇怪的bug,同样的程序在win7和win10上界面相差了2个像素
黄腾霄
2020/06/10
1.3K0
Silverlight控件 - ScatterView
Silverlight控件 - ScatterView 简介: ScatterView是一个布局控件,允许对其内部的子控件进行鼠标拖拽、扔出等操作。 项目地址:http://scatterview.codeplex.com/ 使用: 在这里下载DLL文件,其中包含两个文件:agTweener.dll 、ScatterView.dll。ScatterView.dll是主文件agTweener.dll 是用来做动画效果的,之前 有对他的介绍。下载了文件后在Silverlight项目中添加引用。
用户1172164
2018/03/01
7980
Msdn 杂志 asp.net ajax 文章汇集
asp.net ajax 充分利用客户端 JavaScript、DHTML 和 XMLHttpRequest 对象。其目的是帮助开发人员创建更具交互性的支持 AJAX 的 Web 应用程序 ASP.NET 页面的服务器端:ASP.NET 临时文件的存储以及动态生成的用于为页面响应提供服务的类的源代码。此外,还将构建一个可以与任何 ASP.NET 2.0 或 ASP.NET AJAX(原代号为“Atlas”)应用程序一同使用的资源管理器工具,以查看和调试您的页面执行的实际代码. http://msdn.mic
张善友
2018/01/22
2.7K0
使用OpenCV在Qt控件上播放视频
https://gitee.com/fensnote/demo_code/tree/master/qtCode/opencv_video
fensnote
2021/05/31
2.9K0
使用OpenCV在Qt控件上播放视频
Silverlight控件 - Carrousel
Silverlight控件 - Carrousel 简介: Carrousel是一个布局控件,可对其内部的子控件排出像《旋转木马》一样的效果。 项目地址:http://carrousel.codeplex.com/源文件中包括控件项目、事例项目和一个Web宿主项目。 使用: 在这里下载DLL文件,其中包含一个文件:CarrouselPanel.dll。下载了文件后在Silverlight项目中添加引用。  在page.xaml的头部添加代码  xmlns:CarrouselPanel=
用户1172164
2018/02/28
6340
在web浏览器上显示室内温度(nodeJs+arduino+socket.io)
上次的nodejs操作arduino入门篇中实现了如何连接arduino。这次我们来实现通过arduino测量室内温度并在浏览器上显示出来。 【所需材料】 硬件:LM35温度传感器,arduino u
用户1749219
2018/05/16
2.2K0
如何检测一个元素是否在 vector 中
可以使用头文件 <algorithm> 里的方法 std::find, #include <algorithm> #include <vector> vector<int> vec; if (std::find(vec.begin(), vec.end(), item) != vec.end()) do_this(); else do_that();
ClearSeve
2022/02/10
1.9K0
通过 JS 实现简单的拖拽功能并且可以在特定元素上禁止拖拽
前言 关于讲解 JS 的拖拽功能的文章数不胜数,我确实没有必要大费周章再写一篇重复的文章来吸引眼球。本文的重点是讲解如何在某些特定的元素上禁止拖拽。这是我在编写插件时遇到的问题,其实很多插件的拖拽功能并没有处理这些细节,经过翻阅 jquery ui 的源码才找到答案。 拖拽实现 关于拖拽功能不再啰嗦,直接贴代码 /** * [draggable 拖拽方法] * @param {[type]} modal [移动元素] * @param {[type]} handle [拖拽元素] */ var
叙帝利
2018/01/17
5K0
通过 JS 实现简单的拖拽功能并且可以在特定元素上禁止拖拽
Silverlight/aspx/ajax/mvc的UI自动化测试
web前端的自动化测试,一般要能实现模拟鼠标点击、键盘录入、浏览器页面自动导航等功能,而且关键的是要对整个测试过程能自动录制并回放。 vs2010的SP2已经集成了内置功能,但是目前尚未正式发布,所以本文就不介绍了。有兴趣的同学可参考以下文章: http://msdn.microsoft.com/zh-cn/library/gg413374 http://www.cnblogs.com/scottxu/archive/2011/02/28/1967112.html 除了微软自家即将推出的vs2010 sp2
菩提树下的杨过
2018/01/24
1K0
Silverlight/aspx/ajax/mvc的UI自动化测试
microsoft silverlight
Microsoft Silverlight是一个跨浏览器的、跨平台的 插件,为网络带来下一代基于.NETFramework的媒体体验和丰富的交互式应用程序。Silverlight提供灵活的编程模型,并可以很方便地集成到现有的网络应用程序中。Silverlight可以对运行在 Mac或 Windows上的主流浏览器提供高质量视频信息的快速、低成本的传递。
全栈程序员站长
2022/11/02
1.3K0
microsoft silverlight
[Silverlight 4 RC]WebBrowserBrush概览
上一节介绍了WebBrowser控件,这里就接着WebBrowser介绍下WebBrowserBrush控件。在silverlight 4 beta2时WebBrowserBrush被称为HtmlBrush,他在rc版本被更名为了WebBrowserBrush。 WebBrowserBrush是一种刷子,就好像VideoBrush一样。这里他能绘制出来一些WebBrowser所提供的内容。由于WebBrowser控件的关系,所以它也只能运行在OOB模式下,若是在浏览器中,它将会是一个透明的刷子。 这里注
用户1172164
2018/01/16
7040
在元素上写事件和addEventListener()的区别[通俗易懂]
语法: element.addEventListener( type , listener , useCapture ) – – 添加事件监听 – – type: 事件类型字符串,不使用“on”前缀 – – callback:事件处理程序(回调函数) – – useCapture:可选参数,是否使用事件捕获的方式处理事件。不传递时,默认为false,表示不使用事件捕获(使用事件冒泡),如果需要显示事件捕获,则显示传递true。
全栈程序员站长
2022/09/18
1.2K0
js判断元素在某个区域内是否可见(转)
getBoundingClientRect用于获得页面中某个元素的左,上,右和下分别相对浏览器视窗的位置。getBoundingClientRect是DOM元素到浏览器可视范围的距离(不包含文档卷起的部分)。
山河木马
2019/03/05
7.7K0
Silverlight菜单控件 — CurveMenu
简介: CurveMenu是一个菜单控件,可对其内部的图片排出旋转的效果。 项目地址:http://curvemenu.codeplex.com/ 功能: 曲率 选中项 间距 中间间距 中间放大率 边缘变形率 边缘透明率 可调大小 3DY轴旋转率 文本间距 是否启用文本 是否循环 更新: at 09.09.02 创建项目。 at 09.09.29 提交codeplex。 at 09.10.12 完成封装,制作demo演示。 使用: 使用很简单,添加dll引用为其绑定数据
用户1172164
2018/01/16
5830

相似问题

Silverlight OOB用户菜单控件

13

是否可以动态呈现web控件?

20

是否可以在全屏模式下创建Silverlight应用程序?

11

是否可以在silverlight的浏览器外模式下更改应用程序的标题

15

在silverlight中禁用web浏览器控件上的右键单击选项

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档