• 背水一战 Windows 10 (3)


    [源码下载]


    背水一战 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) - 指定窗口允许的最小尺寸(最小:192×48,最大:500×500)
                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
    [源码下载]

  • 相关阅读:
    find 用法
    linux 查看链接库的版本
    虚函数重载(overwrite) 继承覆盖问题
    将iso mount 到nfs 目录问题
    centos 下使用 pytesseract 识别文字
    nginx 报错Malformed HTTP request line, git 报错fatal: git-write-tree: error building trees
    nfs 支持ipv6
    数位操作
    二分图(最小顶点覆盖 最大匹配 最大独立集 )
    欧几里得算法
  • 原文地址:https://www.cnblogs.com/webabcd/p/5300810.html
Copyright © 2020-2023  润新知