【问题标题】:WPF Fullscreen in RibbonWindow功能区窗口中的 WPF 全屏
【发布时间】:2011-10-20 19:49:51
【问题描述】:

我使用 Microsoft 功能区为 WPF 创建了一个应用程序。我使用 RibbonWindow 而不是简单的 Window 将 QuickAccessToolbar 放置到窗口标题。

问题是我设置时普通窗口变成全屏

  WindowStyle="None"
  WindowState="Maximized"

但是 RibbonWindow 变大了,它的底部隐藏在任务栏后面。

我想 window 和 RibbonWindows 之间的唯一区别是 controlTemplate。 但我真的不明白如何通过模板将窗口放在任务栏上方。

任何想法如何像普通窗口一样显示我的 RibbonWindow above 任务栏?

Link to the VS2010 project (10KiB)(不包括 Microsoft Ribbon For WPF)

【问题讨论】:

    标签: wpf fullscreen ribbon


    【解决方案1】:

    RibbonWindow 使用自定义 WindowChrome。这就是不正确行为的原因。试试这个代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using Microsoft.Windows.Shell;
    
    namespace Utils
    {
        public static class WindowHelper
        {
            public static void Fullscreen(Window p_oWindow)
            {
                p_oWindow.WindowStyle = WindowStyle.None;
                p_oWindow.Topmost = true;
                p_oWindow.WindowState = WindowState.Maximized;
                WindowChrome.SetWindowChrome(p_oWindow, null);
            }
    
            public static void UndoFullscreen(Window p_oWindow)
            {
                p_oWindow.WindowStyle = WindowStyle.SingleBorderWindow;
                p_oWindow.Topmost = false;
                p_oWindow.WindowState = WindowState.Normal;
                WindowChrome.SetWindowChrome(p_oWindow, GetChrome());
            }
    
            public static WindowChrome GetChrome()
            {
                WindowChrome oCustomChrome = new WindowChrome();
                oCustomChrome.CornerRadius = new System.Windows.CornerRadius(0, 0, 0, 0);
                oCustomChrome.CaptionHeight = 0;
                oCustomChrome.ResizeBorderThickness = new System.Windows.Thickness(2, 2, 2, 2);
                return oCustomChrome;
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      问题是WindowStyle。当您删除镶边时,这会在所有 WPF 窗口中发生。 (他们确实针对全屏信息亭应用优化了此功能)。

      为了将窗口最大化到正确的大小,您需要自己处理它。单击最大化按钮时,您将需要获取当前显示器的工作区域。没有 WPF 方法可以做到这一点,但您可以使用 WinForms Screen 类。

      您的最大化方法如下所示:

      // you must save the restore bounds, since we never set Window.WindowState,
      // so the RestoreBounds property will get set to the maximized bounds
      private System.Drawing.Rectangle restoreBounds;
      
      private void DoMaximize(object sender, EventArgs e)
      {
          var bounds = new System.Drawing.Rectangle((int)Left, (int)Top,
              (int)ActualWidth, (int)ActualHeight));
          var screen = System.Windows.Forms.Screen.FromRectangle(bounds);
          var area = screen.WorkingArea;
      
          restoreBounds = bounds; 
      
          Left = area.X;            
          Top = area.Y;          
          Width = area.Width;
          Height = area.Height;
      }
      

      【讨论】:

      • 安倍,我真的不明白你的解决方案。我的任务是使 RibbonWindow 的行为类似于 Window 的行为。它应该隐藏任务栏。但目前反之亦然,任务栏在其上方。
      • 嘿,抱歉,我假设您不想要全屏应用程序,因为这就是它在 Windows 7 上的 .NET 4.0 中的工作方式。您使用的是什么版本的 .NET 和 Windows ?
      • .NET 4.0; Windows 7,用于 WPF 的 Microsoft 功能区 2010 年 10 月。我还想提一下,简单的 WPF 窗口工作得很好。只有 RibbonWindow 给出了这个错误我已经添加了一个 URL 到该错误重现的项目。网址是问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多