Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > WPF окна. Стиль None. Растянуть на весь экран. Про


Автор: CasperSC 21.8.2010, 22:30
Понадобилось мне растянуть окно на весь экран. Делаю я это так:

Код

            //Глобальная переменная
            Window win = new Window();
            //======================

//====== Это содержимое нужно куда нибудь вставить, например обработчик нажатия на кнопке ======
            if (win == null)
            {
                win = new Window();
            }
            win.WindowState = System.Windows.WindowState.Maximized;
            win.WindowStyle = System.Windows.WindowStyle.None;
            win.Cursor = System.Windows.Input.Cursors.Hand;
            //Добавим кнопку "Закрыть" для удобства
            Button btnClose = new Button();
            btnClose.FontSize = 48;
            btnClose.Content = "Закрыть";
            btnClose.Margin = new Thickness(300, 400, 300, 400);
            btnClose.Click += new RoutedEventHandler(btnClose_Click);

            win.Content = btnClose;
            win.Show();
//=================================================================================

        //Обработчик закрытия этого окна
        void btnClose_Click(object sender, RoutedEventArgs e)
        {
            win.Close();
            win = null;
        }


Если вы вставите себе в любой WPF проект этот код, например на обработчик нажатия кнопки какой нибудь, то у вас сразу без проблем это будет работать. Так вот как видите курсор принимает вид "Рука" и окно растянуто на весь экран и поверх панели задач. Так вот когда вы будете водить по нему курсором, он будет иметь вид руки. А теперь попробуйте переместить курсор в правый угол, там он смениться на стрелочку, так как выйдет за пределы окна. Но я не пойму почему так? Ведь окно растягивается на весь экран. Вот эта проблема портит мне всю малину. 
Подскажите как можно обойти эту проблему? Или может это как то решается установкой каких нибудь свойств окна? Или может как-то возможно ограничить движение курсора внутри формы, пока её не закроют?

Автор: Kefir 21.8.2010, 23:01
В твоём коде про курсор ничего не написано и, соответственно, никакой руки мы не увидим при использовании этого кода (может ты забыл строку win.Cursor = Cursors.Hand?). Я попробовал и особо ни в чём не разочаровался - курсок "рука" у меня был везде где только можно (ещё раз - при наличии строчки win.Cursor = Cursors.Hand). Может я чего не понял в твоей проблеме?

Автор: CasperSC 21.8.2010, 23:11
А точно.  Всё добавил в код. Нет, у меня курсор справа выходит за пределы окна почему-то. Сейчас я попробую скриншотов сделать.

Вот у меня справа по всему окну такая полоска. 
user posted image

Автор: Kefir 21.8.2010, 23:18
Наделай, а то я уже все углы обводил и по краям прошелся - рука как рука, хоть убей не меняется smile

Автор: CasperSC 21.8.2010, 23:41
Вот записал видео. WMV формат. Всё вроде отлично видно, разрешение экрана уменьшил, вроде размер не большой получился. А скриншот есть в ответе выше.

Автор: CasperSC 22.8.2010, 11:28
Проблема решилась сама собой, перезагрузил компьютер, проблема исчезла. Мде, я вчера весь вечер просидел над этой бедой, а это просто какой-то глюк.
Я даже решил её так:
Код

            System.Drawing.Rectangle winRect = new System.Drawing.Rectangle(0, 0,
    (int)SystemParameters.PrimaryScreenWidth - 2,
    (int)SystemParameters.PrimaryScreenHeight - 2);
            System.Windows.Forms.Cursor.Clip = winRect;

Но всё равно мне не давало это покоя.

Автор: CasperSC 24.8.2010, 02:59
Вот опять появилась проблема. Курсор выходит за пределы формы. То есть справа получается форма не достаёт до края экрана. А это сильно мешает, так как выделяя рамку на экране, курсор выходит за пределы формы и начинаются всякие проблемы, которые решить кодом выше не реально. Так как это не постоянно. Может это из-за полноэкранных игр? Так как я одну свернул игру, потом запустил программу и опять эта беда. Может это вообще недоработка Framework?

Вот выключил игру и всё закрыл, проблема осталась. Далее жму ПКМ на рабочем столе Windows 7 - "Персонализация", там выбираю другую тему, экран как бы дёргается, все ярлыки на рабочем столе перерисовываются, запускаю программу всё проблема исчезла. Что это может быть? И можно ли такую перерисовку сделать программно?

================================================

Подсказали, что причина может быть в сдвиге растянутой формы, после включения/выключения игры (ну это я и сам понимал в принципе), так как форма растянута на весь экран, то по её краям есть как бы рамка тонкая, вот если добавить в код это:
Код

win.ResizeMode = System.Windows.ResizeMode.NoResize;

То проблема отпадает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)