(对于最初的提问者来说可能为时已晚,但希望对后来来的人有用。)
UsingIHTMLWindow7::getComputedStyle(IHTMLDOMNode node)
返回一个活动IHTMLCSSStyleDeclaration
对象,它在考虑所有规则和内联样式后给出完全计算的样式,包括浏览器默认样式,例如赋予<strong>
较重的字体权重。
如果您想绑定到特定属性,例如backgroundColor
它们可以直接在IHTMLCSSStyleDeclaration
,IHTMLCSSStyleDeclaration2
等上使用。或者,您可以通过名称访问特定属性IHTMLCSSStyleDeclaration::getPropertyValue(string name)
。要获取元素上定义的所有名称的列表,请使用length
和item
属性。
最大的警告是IHTMLWindow7
和IHTMLCSSStyleDeclaration
* 接口没有在 mshtml 的主互操作程序集中声明,因此默认情况下它们不能以强绑定方式使用。因此,您既可以动态访问它们,也可以创建一个自定义互操作程序集来提供对它们的访问。
为 mshtml 创建自定义互操作程序集 (IA) 并不难,但默认情况下,.NET 成员定义通常并不理想,而且程序集很大。如果您不介意,请在您的 PC 上找到 mshtml.tlb 并从 VS 开发人员提示符运行它:
tlbimp mshtml.tlb /out:"custommshtml.dll" /namespace:"custommshtml" /transform:dispret /asmversion:"1.0.0.0" /tlbreference:"C:\Windows\System32\stdole2.tlb" /nologo /silence:3001 /silence:3002
这会为您安装的 IE 版本生成一个 IA。您会收到一些警告,只要您不打算使用这些成员,就可以忽略这些警告。根据需要进行调整,但不要用作mshtml
命名空间——这会使事情变得非常混乱。
在您的项目中,引用您的 IA 而不是 mshtml。您需要调整using
语句等以使用不同的命名空间。根据原始 DOM 对象的来源,您可能会发现它们在mshtml
命名空间中有一个类型。没关系; 您仍然可以使用自定义界面。此外,在调试即时窗口期间,可能会声称某些方法/属性不存在,即使它们出现在 IntelliSense 中——这只是因为它们没有在项目中被引用,因此编译器没有嵌入所需的定义。