【发布时间】:2023-03-29 14:40:01
【问题描述】:
我正在尝试使我的 Windows 7 Phone 应用程序上的 WebBrowser 控件透明,因此它可以与应用程序的其余部分具有相同的主题,但我尝试过的任何事情都没有成功。 我仍然需要能够看到 HTML 文本,但只是让背景透明。在控件中使用 CSS 似乎不起作用,我也无法通过 XAML 让它工作。这可能吗?这个post,并不令人鼓舞。
【问题讨论】:
标签: windows-phone-7
我正在尝试使我的 Windows 7 Phone 应用程序上的 WebBrowser 控件透明,因此它可以与应用程序的其余部分具有相同的主题,但我尝试过的任何事情都没有成功。 我仍然需要能够看到 HTML 文本,但只是让背景透明。在控件中使用 CSS 似乎不起作用,我也无法通过 XAML 让它工作。这可能吗?这个post,并不令人鼓舞。
【问题讨论】:
标签: windows-phone-7
这是不可能的。浏览器引擎总是为 HTML 页面呈现背景颜色。您可以为 BODY 标签指定颜色,但“透明”的值总是以白色结束。您分配给 WebBrowser XAML 元素的背景颜色实际上没有任何效果,因为浏览器引擎实际上是在其顶部呈现。
与您的应用主题相匹配的最佳选择是通过 InvokeScript 将应用主题背景颜色传递到 HTML 页面中,然后将其设置在 BODY 元素上的 Javascript 函数。这假定您可以控制正在加载的 HTML 内容。 (另外,不要忘记通过 IsScriptEnabled 启用脚本。)
【讨论】:
作为尝试加载一些初始内容以将 webbrowser 控件设置为显示颜色以匹配页面背景的替代方法(或可能除了),您可以将控件的不透明度设置为 0,然后更改当控件上的Navigated 事件第一次被触发时,它为 1。
【讨论】:
代码解决方案:
private void SetHtml(WebBrowser browser, string body)
{
string style = "<style>";
string background = GetColorForCss("PhoneBackgroundColor");
string foreground = GetColorForCss("PhoneForegroundColor");
style += "body{background-color: " + background + "; color: " + foreground + ";}";
style += "</style>";
string html = "<!DOCTYPE html><html><head>" + style + "</head><body>" + body + "</body></html>";
Color phoneBackground = (Color)Application.Current.Resources["PhoneBackgroundColor"];
browser.Background = new SolidColorBrush(phoneBackground);
browser.Opacity = 0;
browser.NavigateToString(html);
browser.LoadCompleted += browser_LoadCompleted;
}
void browser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
_browser.OpacityMask = null;
_browser.Opacity = 1;
}
【讨论】:
您可以为 webbrowser 组件中显示的 html 内容设置样式,因此该组件将具有您应用的外观和感觉
web_browser.NavigateToString(html: "<html style='background-color:" + BACKGROUND_THEME_COLOR + ";color:" + FOREGROUND_THEME_COLOR + ";font-size:15pt;'>" + your_html_content + "</html>");
【讨论】: