我在MVVM WP7应用程序中使用WebBrowser控件.我使用附加属性来允许将控件绑定到生成的HTML字符串,如http://compiledexperience.com/blog/posts/binding-html-to-the-web-browser-control中所述.附加属性绑定到我的VM,生成HTML代码.问题是代码是在控件完全加载之前生成的,因此当VM属性发生更改时会出现异常:
在可视树中,您无法调用WebBrowser方法.
我可以使用一些"hack",比如完全避免绑定,而是从我的VM中激活一个事件并让视图处理它并将其调用到WebBrowser.NavigateToString,直到它被加载,但我想知道是否有人可以提出更好的建议,更优雅的方式......
我认为最好的办法是修复附加属性以使其正常工作.这是一个建议:
private static void OnHtmlChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var browser = d as WebBrowser;
if(browser == null)
return;
var html = e.NewValue.ToString();
try
{
browser.NavigateToString(html);
}
catch (Exception ex)
{
browser.Loaded += (s,e3) =>
{
browser.NavigateToString(html);
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码尝试显示HTML,如果抛出异常,则处理Loaded事件(在可视树中呈现控件时发生),然后提供HTML.
可能有比try/catch更好的方法,值得检查API WebControl
.但是,上述应该有效.
归档时间: |
|
查看次数: |
1017 次 |
最近记录: |