背水一戰 Windows 10 (3) - UI: 視窗全屏, 視窗尺寸

来源:http://www.cnblogs.com/webabcd/archive/2016/03/21/5300810.html
-Advertisement-
Play Games

背水一戰 Windows 10 之 UI: 視窗全屏, 視窗尺寸


[源碼下載]


背水一戰 Windows 10 (3) - UI: 視窗全屏, 視窗尺寸



作者:webabcd


介紹
背水一戰 Windows 10 之 UI

  • 視窗全屏
  • 視窗尺寸



示例
1、視窗全屏
UI/FullScreen.xaml

<Page
    x:Class="Windows10.UI.FullScreen"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.UI"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Transparent">
        <StackPanel Margin="10 0 10 10">

            <TextBlock Name="lblMsg" Margin="0 10 0 0" />

            <Button Name="btnFullScreen" Content="全屏/取消全屏" Click="btnFullScreen_Click" Margin="0 10 0 0" />

            <Button Name="btnShowStandardSystemOverlays" Content="在全屏狀態下,顯示系統 UI,比如標題欄和任務欄" Click="btnShowStandardSystemOverlays_Click" Margin="0 10 0 0" />

            <CheckBox Name="chkFullScreenSystemOverlayMode" Content="全屏狀態下的,系統邊緣手勢的響應模式 unchecked:FullScreenSystemOverlayMode.Standard, checked:FullScreenSystemOverlayMode.Minimal" Click="chkFullScreenSystemOverlayMode_Click" Margin="0,10,0,0" />

            <CheckBox Name="chkPreferredLaunchWindowingMode" Content="視窗的啟動模式 unchecked:ApplicationViewWindowingMode.Auto, unchecked:ApplicationViewWindowingMode.FullScreen" Click="chkPreferredLaunchWindowingMode_Click" Margin="0,10,0,0" />
            
        </StackPanel>
    </Grid>
</Page>

UI/FullScreen.xaml.cs

/*
 * 演示“視窗全屏”相關知識點
 *
 * ApplicationView - 用於操作視窗以及獲取視窗信息
 *     GetForCurrentView() - 返回 ApplicationView 實例
 */

using Windows.System;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Navigation;

namespace Windows10.UI
{
    public sealed partial class FullScreen : Page
    {
        private MainPage _rootPage;

        public FullScreen()
        {
            this.InitializeComponent();

            this.Loaded += FullScreen_Loaded;
        }

        private void FullScreen_Loaded(object sender, RoutedEventArgs e)
        {
            /*
             * ApplicationView.PreferredLaunchWindowingMode - 視窗的啟動模式
             *     Auto - 系統自動決定
             *     PreferredLaunchViewSize - 由 ApplicationView.PreferredLaunchViewSize 決定(參見:UI/ScreenSize.xaml)
             *     FullScreen - 全屏啟動
             *
             * ApplicationView.GetForCurrentView().FullScreenSystemOverlayMode - 全屏狀態下的,系統邊緣手勢的響應模式
             *     Standard - 標準方式。比如滑鼠移動到頂端顯示標題欄,移動到底端顯示任務欄
             *     Minimal - 最小方式。比如滑鼠移動到頂端顯示一個小的臨時 UI,移動到底端顯示一個小的臨時 UI,點擊這個臨時 UI 時再顯示標題欄或任務欄
             */

            // unchecked:FullScreenSystemOverlayMode.Standard, checked:FullScreenSystemOverlayMode.Minimal
            chkFullScreenSystemOverlayMode.IsChecked = ApplicationView.GetForCurrentView().FullScreenSystemOverlayMode == FullScreenSystemOverlayMode.Minimal;

            // unchecked:ApplicationViewWindowingMode.Auto, unchecked:ApplicationViewWindowingMode.FullScreen
            chkPreferredLaunchWindowingMode.IsChecked = ApplicationView.PreferredLaunchWindowingMode == ApplicationViewWindowingMode.FullScreen;
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            _rootPage = MainPage.Current;
            _rootPage.KeyDown += _rootPage_KeyDown;
        }

        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            _rootPage.KeyDown -= _rootPage_KeyDown;
        }

        private void _rootPage_KeyDown(object sender, KeyRoutedEventArgs e)
        {
            // 判斷是否按下了 escape 鍵
            if (e.Key == VirtualKey.Escape)
            {
                var view = ApplicationView.GetForCurrentView();
                if (view.IsFullScreenMode)
                {
                    // 退出全屏狀態
                    view.ExitFullScreenMode();
                }
            }
        }

        private void btnFullScreen_Click(object sender, RoutedEventArgs e)
        {
            ApplicationView view = ApplicationView.GetForCurrentView();
            // 判斷當前是否是全屏模式
            if (view.IsFullScreenMode)
            {
                // 退出全屏模式
                view.ExitFullScreenMode();
                lblMsg.Text = "退出全屏模式";
            }
            else
            {
                // 嘗試進入全屏模式
                bool isSuccess = view.TryEnterFullScreenMode();
                if (isSuccess)
                {
                    lblMsg.Text = "進入全屏模式";
                }
                else
                {
                    lblMsg.Text = "嘗試進入全屏模式失敗";
                }
            }
        }

        private void btnShowStandardSystemOverlays_Click(object sender, RoutedEventArgs e)
        {
            ApplicationView view = ApplicationView.GetForCurrentView();
            // 在全屏狀態下,是否顯示系統 UI,比如標題欄和任務欄
            view.ShowStandardSystemOverlays();
        }

        private void chkFullScreenSystemOverlayMode_Click(object sender, RoutedEventArgs e)
        {
            ApplicationView view = ApplicationView.GetForCurrentView(); 
            view.FullScreenSystemOverlayMode = chkFullScreenSystemOverlayMode.IsChecked.Value ? FullScreenSystemOverlayMode.Minimal : FullScreenSystemOverlayMode.Standard;
        }

        private void chkPreferredLaunchWindowingMode_Click(object sender, RoutedEventArgs e)
        {
            ApplicationView.PreferredLaunchWindowingMode = chkPreferredLaunchWindowingMode.IsChecked.Value ? ApplicationViewWindowingMode.FullScreen : ApplicationViewWindowingMode.Auto;
        }
    }
}


2、視窗尺寸
UI/ScreenSize.xaml

<Page
    x:Class="Windows10.UI.ScreenSize"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.UI"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Transparent">
        <StackPanel Margin="10 0 10 10">

            <TextBlock Name="lblMsg" Margin="0 10 0 0" />

            <Button Name="btnChangeSize" Content="嘗試改變視窗大小" Click="btnChangeSize_Click" Margin="0 10 0 0" />

        </StackPanel>
    </Grid>
</Page>

UI/ScreenSize.xaml.cs

/*
 * 演示“視窗尺寸”相關知識點
 *
 * ApplicationView - 用於操作視窗以及獲取視窗信息
 *     GetForCurrentView() - 返回 ApplicationView 實例
 */

using Windows.Foundation;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

namespace Windows10.UI
{
    public sealed partial class ScreenSize : Page
    {
        public ScreenSize()
        {
            this.InitializeComponent();

            this.Loaded += ScreenSize_Loaded;
        }

        private void ScreenSize_Loaded(object sender, RoutedEventArgs e)
        {
            // Window.Current.Bounds - 當前視窗的大小(單位是有效像素,沒有特別說明就都是有效像素)
            //     註:視窗大小不包括標題欄,標題欄屬於系統級 UI
            lblMsg.Text = string.Format("window size: {0} * {1}", Window.Current.Bounds.Width, Window.Current.Bounds.Height);

            ApplicationView applicationView = ApplicationView.GetForCurrentView();

            // SetPreferredMinSize(Size minSize) - 指定視窗允許的最小尺寸
            //     最小 width 和最小 height 都不能為零,我這裡測試的是最小 width 為 192,最小 height 為 48
            applicationView.SetPreferredMinSize(new Size(200, 200));

            // PreferredLaunchViewSize - 視窗啟動時的初始尺寸
            // 若要使 PreferredLaunchViewSize 設置有效,需要將 ApplicationView.PreferredLaunchWindowingMode 設置為 ApplicationViewWindowingMode.PreferredLaunchViewSize
            ApplicationView.PreferredLaunchViewSize = new Size(800, 480);
            ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.PreferredLaunchViewSize;
            
            /*
             * ApplicationView.PreferredLaunchWindowingMode - 視窗的啟動模式
             *     Auto - 系統自動調整
             *     PreferredLaunchViewSize - 由 ApplicationView.PreferredLaunchViewSize 決定
             *     FullScreen - 全屏啟動
             */
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            // 視窗尺寸發生變化時觸發的事件
            Window.Current.SizeChanged += Current_SizeChanged;
        }

        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            Window.Current.SizeChanged -= Current_SizeChanged;
        }

        private void Current_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e)
        {
            lblMsg.Text = string.Format("window size: {0} * {1}", e.Size.Width, e.Size.Height);
        }

        private void btnChangeSize_Click(object sender, RoutedEventArgs e)
        {
            ApplicationView applicationView = ApplicationView.GetForCurrentView();
            
            Size size = new Size(600, 600);

            // TryResizeView(Size value) - 嘗試將視窗尺寸設置為指定的大小
            bool success = applicationView.TryResizeView(size);
            if (success)
            {
                lblMsg.Text = "嘗試修改視窗尺寸成功";
            }
            else
            {
                lblMsg.Text = "嘗試修改視窗尺寸失敗";
            }

            // 註:怎麼修改視窗的顯示位置呢?暫時不知道
        }
    }
}



OK
[源碼下載]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在討論這個問題之前,我們先瞭解這樣一種觀點,線程之間的通信是通過發信號來進行溝通的。(這不是廢話) 先來討論ManualResetEvent,討論過程中我會穿插一些AutoResetEvent的內容,來做對比: ManualResetEvent都可以阻塞一個或多個線程,直到收到一個信號告訴Manua
  • 示例: 在解決方案資源管理器下項目名稱右鍵生成 待生成完畢後 電腦存儲位置debug文件夾下即可出現輸出結果
  • 在C#中,使用system.IO.File.Create()創建完一個文件之後,如果需要對這個文件進行寫操作,會出現錯誤,提示你“這個文件正在被使用”。 原因是System.IO.File.Create()返回的是一個FileStream,這個需要關閉,才能對其創建的文件進行寫操作。有兩種方法: 1
  • 項目開發從來就不是一個簡單的問題。更難的問題是維護其他人開發的項目,並且要修改bug。如果原系統有重大問題還需要重構。 怎麼重構系統不是本文探討的問題,但是重構後如何上線部署和本文關係密切。這個大家可能剛興趣。 言歸正傳,現在演示一下如果做到部分版本和部分模塊更新。 Asp.net Mvc模塊化開發
  • 要使用Dictionary集合,需要導入C#泛型命名空間 System.Collections.Generic(程式集:mscorlib) 1、從一組鍵(Key)到一組值(Value)的映射,每一個添加項都是由一個值及其相關連的鍵組成 2、任何鍵都必須是唯一的 3、鍵不能為空引用null(VB中的N
  • 因為工作需要,需要做一個數據上傳的程式,客戶規定的是:數據介面採用http連接,採用JSON-RPC輕量級遠程調用協議。所以決定用winform做一個管理界面(其中還包括其他的功能),java完成數據的傳輸,用winform調用jar包來完成客戶需求。 具體做法如下(參考至http://blog.c
  • 今天是世界兒歌日,2016-3-21 ,下載個何問起鍵盤彈兒歌。何問起鍵盤 是一個 用電腦鍵盤彈奏音樂的軟體。 在上個版本 (http://www.cnblogs.com/sosoft/p/cspiano.html) 的基礎上,做了改進。 下載地址:http://hovertree.com/h/bj
  • 本來想遠程啟用下Guest賬戶測試一下(學習),但配置文件修改後總是不成功(沒有效果) 過程如下: 1:先找到配置文件地址 不錯,很貼心還有說明,在登錄賬戶的AppData下. 2:直接進入對應目錄: 恩恩,不錯,這裡還有example文件. 3:開始修改: 複製出一個rabbitmq.config
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...