Silverlight 提供了在全屏模式下顯示基于 Silverlight 的應(yīng)用程序的功能。
本主題包括下列各節(jié)。
當(dāng)您將 IsFullScreen 屬性設(shè)置為 true 時,基于 Silverlight 的應(yīng)用程序即進(jìn)入全屏模式。 當(dāng)該應(yīng)用程序進(jìn)入全屏模式時,會短暫顯示下面的消息:“按 ESC 退出全屏模式”。 此消息提醒用戶應(yīng)用程序現(xiàn)在處于全屏模式,并提供有關(guān)如何返回到嵌入模式的信息。
下面的代碼示例演示如何通過切換 IsFullScreen 屬性值來啟用和禁用全屏模式。
Page rootPage = new Page(); private void Application_Startup(object sender, StartupEventArgs e) { this.RootVisual = rootPage; rootPage.LayoutRoot.MouseLeftButtonDown += delegate(Object s, MouseButtonEventArgs args) { this.Host.Content.IsFullScreen = !this.Host.Content.IsFullScreen; }; this.Host.Content.FullScreenChanged += new EventHandler(DisplaySizeInformation); this.Host.Content.Resized += new EventHandler(DisplaySizeInformation); } private void DisplaySizeInformation(Object sender, EventArgs e) { String message = String.Format( "ActualWidth={0}, ActualHeight={1}", this.Host.Content.ActualWidth, this.Host.Content.ActualHeight); rootPage.LayoutRoot.Children.Clear(); rootPage.LayoutRoot.Children.Add( new TextBlock { Text = message }); }
全屏模式的局限性
基于 Silverlight 的應(yīng)用程序僅在響應(yīng)用戶啟動的操作時才可以進(jìn)入全屏模式。 這意味著只能在用戶輸入事件處理程序中通過編程切換到全屏模式。 例如,如果嘗試在 Startup 事件處理程序中將 IsFullScreen 屬性設(shè)置為 true,將忽略該屬性設(shè)置。 通過限制啟用全屏模式的操作,可以確保用戶始終是全屏模式行為的啟動者。 這將防止惡意應(yīng)用程序偽造操作系統(tǒng)或其他程序的外觀。
用戶啟動和其他要求不適用于受信任的應(yīng)用程序。 有關(guān)更多信息,請參見下一節(jié)。 |
默認(rèn)情況下,一次只能有一個應(yīng)用程序可處于全屏模式。 該應(yīng)用程序通常將在用戶切換到其他應(yīng)用程序時退出全屏模式。
若要配置基于 Silverlight 的應(yīng)用程序,使其無論是否活動均保持在全屏模式中,請將 FullScreenOptions 屬性設(shè)置為 StaysFullScreenWhenUnfocused。 這將支持用戶在與其他應(yīng)用程序交互時仍以全屏模式查看該應(yīng)用程序。 用戶還可以在全屏模式下顯示多個應(yīng)用程序。
當(dāng)某個應(yīng)用程序雖不活動但保持全屏模式時,用戶可以切換到其他應(yīng)用程序。 這包括最初的宿主瀏覽器或?yàn)g覽器外窗口,其中嵌入的 Silverlight 插件將顯示一個空區(qū)域,而該應(yīng)用程序仍處于全屏模式下。
多數(shù)情況下,切換回全屏應(yīng)用程序不會重新顯示全屏消息。 這意味著惡意應(yīng)用程序又有機(jī)會來偽裝其他應(yīng)用程序。 為幫助防止發(fā)生此情況,StaysFullScreenWhenUnfocused 設(shè)置會使應(yīng)用程序在進(jìn)入全屏模式之前顯示征求用戶同意的對話框。 如果用戶不同意,則應(yīng)用程序?qū)⑹褂媚J(rèn)的全屏行為。
征求用戶同意的對話框包含一個復(fù)選框,可供用戶保存自己的首選項(xiàng)。 用戶可以在 "Microsoft Silverlight 配置"對話框中修改自己的首選項(xiàng)。
當(dāng)基于 Silverlight 的應(yīng)用程序處于全屏模式下時,會禁止大多數(shù)鍵盤事件。 全屏模式期間此鍵盤輸入限制是一個安全功能,可用于將用戶輸入意外信息的可能性降至最低。 在全屏模式下,只允許通過以下鍵進(jìn)行輸入:
向上鍵
向下鍵
向左鍵
向右鍵
空格鍵
Tab
向上翻頁
向下翻頁
Home
End
Enter
Silverlight 在全屏模式下不支持對話框。 除了征求用戶同意的對話框之外,還不支持 OpenFileDialog 和 SaveFileDialog 類。 在大多數(shù)情況下,在全屏模式下顯示某個對話框?qū)?dǎo)致應(yīng)用程序恢復(fù)嵌入模式。 但是,為了避免在某些瀏覽器上出現(xiàn)問題,您應(yīng)該在使用顯示對話框的某項(xiàng)功能之前退出全屏模式。
全屏模式下不支持拖放或多點(diǎn)觸控輸入。 如果您的應(yīng)用程序使用這些功能,您應(yīng)該在應(yīng)用程序進(jìn)入全屏模式時提供針對備選方式的用戶指導(dǎo)。
受信任的應(yīng)用程序的全屏模式
全屏消息、用戶啟動要求、鍵盤限制和對話框限制都不適用于受信任的應(yīng)用程序。 此外,在使用 StaysFullScreenWhenUnfocused 設(shè)置時,受信任的應(yīng)用程序不顯示征求用戶同意的對話框。
在受信任的應(yīng)用程序中,您可以在 Application.Startup 或 FrameworkElement.Loaded 事件處理程序中進(jìn)入全屏模式。 但是,您必須通過設(shè)置傳遞到 Dispatcher.BeginInvoke 方法的委托中的 IsFullScreen 屬性來執(zhí)行。
由于 ESC 鍵對受信任的應(yīng)用程序不具有內(nèi)置影響,您可以將該鍵用于自己的目的。 在這種情況下,您應(yīng)該執(zhí)行并記載一個備選方式,以便用戶能夠退出全屏模式。
有關(guān)更多信息,請參見 受信任的應(yīng)用程序。
全屏模式下應(yīng)用程序的大小
當(dāng)基于 Silverlight 的應(yīng)用程序處于全屏模式下時,該應(yīng)用程序的大小等于屏幕的當(dāng)前分辨率。 但是,在切換到全屏模式期間不影響該插件的 width 和 height 屬性的值。 若要確定全屏模式下該應(yīng)用程序的實(shí)際大小,請使用 Content.ActualWidth 和 Content.ActualHeight 屬性。 在全屏模式下,將這些屬性設(shè)置為屏幕的當(dāng)前分辨率。
處于全屏模式下的應(yīng)用程序在切換回嵌入模式時,該插件大小會還原為 width 和 height 屬性的值。
有關(guān) width 和 height 屬性的更多信息,請參見 HTML 對象元素的屬性值。
模式更改期間的性能特征
在嵌入模式與全屏模式之間切換,對應(yīng)用程序內(nèi)所含內(nèi)容的性能所帶來的影響非常小。 這意味著,在大多數(shù)情況下音頻或視頻內(nèi)容的播放是完全連續(xù)的。
為了獲得最佳性能,當(dāng)應(yīng)用程序進(jìn)入全屏模式后,請斷開在全屏模式下未呈現(xiàn)的所有對象與可視化樹的連接,或者隱藏這些對象。 可以通過將對象的 Visibility 屬性設(shè)置為Collapsed 來隱藏該對象。 |
全屏無窗口應(yīng)用程序
Windowless 屬性設(shè)置為 true 的 Silverlight 插件在全屏模式下顯示時,始終會以完全不透明的方式繪制其背景色。 但是,當(dāng)該應(yīng)用程序返回嵌入模式時,背景色會還原為其以前的不透明度值。
全屏模式下不支持無窗口 HTML 覆蓋效果。 但是,瀏覽器外應(yīng)用程序可以使用 WebBrowser 控件在全屏模式下顯示 HTML。
處于全屏模式的基于 Silverlight 的應(yīng)用程序可以采用多種方式返回嵌入模式。 離開全屏模式的最簡單方法是由用戶按 ESC 或使用以下?lián)翩I組合之一:
Windows 用戶可以按 Alt+F4。
Macintosh 用戶可以按 COMMAND+ESC。
此外,如果全屏模式下的應(yīng)用程序失去焦點(diǎn),除非 StaysFullScreenWhenUnfocused 設(shè)置仍然有效,否則該應(yīng)用程序?qū)⒎祷厍度肽J健?/span> 當(dāng)另一個應(yīng)用程序通過用戶操作獲取焦點(diǎn)后,處于全屏模式的應(yīng)用程序可能失去焦點(diǎn)。 例如,使用 Alt+Tab 鍵組合在 Windows 中的任務(wù)之間切換會使當(dāng)前應(yīng)用程序失去焦點(diǎn),并且使下一個應(yīng)用程序獲取焦點(diǎn)。
將 IsFullScreen 屬性設(shè)置為 False
當(dāng)您將 IsFullScreen 屬性設(shè)置為 false 時,基于 Silverlight 的應(yīng)用程序即退出全屏模式。 當(dāng)應(yīng)用程序切換回嵌入模式時,該應(yīng)用程序的大小會還原為插件 width 和 height 屬性的值。
每當(dāng) IsFullScreen 屬性更改時,就會發(fā)生 Content.FullScreenChanged 事件。 您可以處理此事件以便在全屏模式下更改您的用戶界面。
當(dāng)應(yīng)用程序進(jìn)入全屏模式時,不會發(fā)生 Resized 事件。 但是,您通常在 Resized 和 FullScreenChanged 事件的處理程序中執(zhí)行相似的布局更改。 |