none
Проблема с окном на WPF RRS feed

  • Общие обсуждения

  • доброе время суток!

    Уже как 2 неделю ломаю голову над тем как исправить проблему того, что при максимизации Wpf окна когда делаю свой стиль окна AllowsTransparency="True" и WindowsStyle="None" при таких параметрах когда делается после нажатия F5 Максимизация окна, окно закрывает панель задач как этого иcправить?

    Ответ был дан в этой теме...  https://social.msdn.microsoft.com/Forums/ru-RU/7d2e66fa-a071-4eb4-86af-7f4a6a932e4a/-?forum=fordesktopru

    Но очень бы хотелось увидеть развернутый ответ для новичков.

    Заранее благодарю всех)

    7 декабря 2014 г. 19:01

Все ответы

  • Окно необходимо подписать на событие StateChange. В обработчике события, необходимо проверить состояние окна, в котором оно находится, вычислить высоту панели задач и задать новую высоту окна по формуле (текущая высота окна - высота панели) :

    this.StateChanged += new EventHandler(MyWindow_StateChanged);

    void MyWindow_StateChanged(object sender, EventArgs e) {

    // Проверяем состояние окна (должно быть развернуто) if (this.WindowState == WindowState.Maximized) {

    // 1. Операции по вычислению высоты панели задач

    Примерно так http://www.cyberforum.ru/csharp-net/thread186025.html

    // Операции по вычислению текущей высоты окна

    Используйте свойство окна ActualHeight

    // Операция присвоения высоте окна нового значения (высота окна - высота панели)

    Задайте окну свойство Height (= разница значений высот)

    } }

    Я думаю, что так должно получиться :)


    • Изменено kremlinbot 7 декабря 2014 г. 19:53
    7 декабря 2014 г. 19:51
  • Эммм... а именно куда вставить?

    public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }

            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                label1.Content = DateTime.Now.ToString("dd MMMM yyyy г.");
            }

            

        }
    }

    7 декабря 2014 г. 20:15
  • Я вставил и тут же ошибка

    public MainWindow()
            {
                InitializeComponent();
                this.StateChanged += new EventHandler(MyWindow_StateChanged);

           }

    Выделена она

    7 декабря 2014 г. 20:17
  • В код окна добавьте вот такой метод (прямо под конструктор):

    private void MyWindow_StateChanged(object sender, EventArgs e)
    {
        if (this.WindowState == System.Windows.WindowState.Maximized)
        {
            this.WindowState = System.Windows.WindowState.Normal;
            this.Left = 0;
            this.Top = 0;
            this.Height = SystemParameters.WorkArea.Height;
            this.Width = SystemParameters.WorkArea.Width;
        }
    }

    Окно открывается на весь экран корректно, но вот информация о состоянии Normal теряется.

    Выглядит вот так:

    Белое с кнопкой, это окно развернутое на весь экран ;)

    8 декабря 2014 г. 12:20
    Отвечающий
  • Спасибо... Проверю.. Отпишусь...

    Но самое что странное на другом ПК у товарища все нормально отображается...

    8 декабря 2014 г. 15:11
  • А если попробовать сохранить информацию о Normal?
    8 декабря 2014 г. 15:27
  • Проверил.. Да он открывается Панель задач видна. Но есть маленькая опять проблема...

    При первой компиляции:

    А должно быть вот так:

    Второе окно получается если при первом окне нажать в правом верхнем углу среднею кнопку а потом снова её же то окно становиться на на второй картинке.

    В свойствах окна ResiseMode - NoResize. Что мне включить а что выключить?

    Или может у кого есть тема написанная в стиле Visual Studio 2013? Поделитесь.... Я пытаюсь её написать.

    8 декабря 2014 г. 15:56
  • Судя по тому, что у вас на обоих картинках просвечивает абсолютно одинаковый фон через панель задач, проблему озвученную в топике вы решили. Теперь, насколько я понимаю, у вас проблема с показом синей полосы в некоторых режимах. Для решения этой проблемы информации точно не достаточно. Поэтому, если мое предположение верно, то закройте этот топик отметив ответ или ответы которые помогли вам в решении вашей проблемы и откройте новый, в котором уже и задавайте вопросы по поводу синей полосы.
    9 декабря 2014 г. 7:29
    Отвечающий
  • Судя по тому, что у вас на обоих картинках просвечивает абсолютно одинаковый фон через панель задач, проблему озвученную в топике вы решили. Теперь, насколько я понимаю, у вас проблема с показом синей полосы в некоторых режимах. Для решения этой проблемы информации точно не достаточно. Поэтому, если мое предположение верно, то закройте этот топик отметив ответ или ответы которые помогли вам в решении вашей проблемы и откройте новый, в котором уже и задавайте вопросы по поводу синей полосы.

    благодарю за ответ и предложение... Но на самом деле проблема то не решена! Она изначально как была так и осталась. Синяя полоса это конец окна (статус бар) На втором рисунке оно (окно в целом) раскрывается путем сначала открывается как на первом... После нажатия средней кнопки (левее от кнопки закрытия окна) Окно становиться меньше и при повторном нажатии на неё окно раскрывается как и задумано мной было!

    Вот в этом и был весь вопрос изначально!!! Как добиться мне того что б окно открывалось при максимизации с первого раза как на втором ресунке???

    9 декабря 2014 г. 15:51