WPF полноэкранный в RibbonWindow - PullRequest
0 голосов
/ 05 августа 2011

Я создал приложение с использованием ленты Microsoft для WPF.Я использовал RibbonWindow вместо простого Window, чтобы поместить QuickAccessToolbar в заголовок окна.

Проблема в том, что нормальное Window становится полноэкранным, когда я установил

  WindowStyle="None"
  WindowState="Maximized"

Но RibbonWindow становится больше, а его нижняя часть скрываетсяПанель задач.

Я полагаю, что единственное отличие между окном и RibbonWindows - это controlTemplate.Но я на самом деле не понимаю, как я могу через шаблон поместить окно над панелью задач.

Есть идеи, как показать панель задач RibbonWindow над так же, как это делает обычное окно?

Ссылка на проект VS2010 (10 КБ) (Microsoft Ribbon For WPF не входит в комплект)

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

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;
        }
    }
}
0 голосов
/ 06 августа 2011

Проблема в 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...