Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сломался ресайз окна, Окно не ресайзится автоматически 
:(
    Опции темы
stupidboy
Дата 19.10.2011, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 19.10.2011

Репутация: нет
Всего: нет



Доброго всем времени суток. Очень нужна ваша помощь. Проблема моя в следующем. Место действия WPF. Есть окно. В нем Grid.  В этом Grid’e еще Grid. В котором в свою очередь находится ListBox. Во время выполнения программы в этот ListBox добавляются новые айтемы(ипользуется привязка к их массиву). При увеличении размера ListBox’a должно увеличиваться само окно. В принципе оно увеличивается, но только если курсором не поменять до этого исходные размеры окна. Вообщем ситуация такая. Если после открытия окна, не менять его исходных размеров то при увеличении ListBox’a увеличивается и размер окна. Но стоит только немного мышкой сузить или расширить размер окна, как ресайз отрубается, контент увеличиватся и выползает(по высоте) за границы окна. Само же окно не меняется не на миллиметр. Событие SizeChanged  не вызывается. На сколько я понимаю, сдесь я имею дело с восходящим событием, т.е. оно от ListBox’a по гридам доходит до окна. Но при изменении исходных размеров окна, что то в этой схеме происходит. То ли ListBox сам не инициализирует событие, то ли оно теряется по дороге к окну. Поэтому у меня возникло несколько вопросов:

1)Как узнать какое именно событие стало причиной вызова SizeChanged у окна, то есть как прослидить всю цепочку событий от ListBox’a до окна. SizeChanged окна вызывается методом OnRenderSizeChanged, а кто вызывает этот метод?

2)Что такое страшное «ручной» ресайз сделал с окном, что оно перестает ресайзится автоматически.

3)А можно ли в ручную изменить размеры окна в WPF. Например при событии увеличения размера ListBox’a, вручную растянуть само окно. Я пробовал это провернуть с помощью 
OnRenderSizeChanged(SizeChangedInfo sizeInfo), но в SizeChangedInfo нельзя явно задать новые размеры. Можно только передать обьект с такими размерами. Так что, этот вариант отпадает. Или нет и есть способ его обойти?


Буду очень признателен за любой совет. Возможно такой вопрос уже поднимался, и кто нибудь поделится ссылкой  на форум( статью, ресурс). В любом случае очень надеюсь на вашу помощь, так как мне этот ресайз до зарезу как нужно отремонтировать. Заранее всем благодарен!!  

PM MAIL   Вверх
RastaDja
Дата 19.10.2011, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



Попробуйте изменять размеры вручную, используя свойство окна SizeToContent тут. После очередного добавления\удаления элемента в ListBox, или при ручном изменении размера, напишите код
Код

WindowName.SizeToContent = System.Windows.SizeToContent.WidthAndHeight;

где WindowName - имя вашего окна.
Код

<Window x:Class="Project.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

<!-- вот где указывается имя окна -->
        Name="WindowName" >


Скорее всего, тут дело в том, что при изменении размера мышкой, свойство SizeToContent меняет свое значение, нужно выставить его обратно в WidthAndHeight.

Удачи.


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
stupidboy
Дата 19.10.2011, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 19.10.2011

Репутация: нет
Всего: нет



RastaDja, огромное вам спасибо за совет. Но это гадкое окно все равно не хочет ресазится.
PM MAIL   Вверх
RastaDja
Дата 19.10.2011, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



вот так все работать должно 
Код

private void WindowName_SizeChanged(object sender, SizeChangedEventArgs e)
{
   WindowName.SizeToContent = System.Windows.SizeToContent.WidthAndHeight;
}


Я могу посоветовать вам заблокировать изменение размера окна (ResizeMode="NoResize"), тогда все еще проще
Код

<Window x:Class="Project.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       ResizeMode="NoResize" SizeToContent="WidthAndHeight">


Это сообщение отредактировал(а) RastaDja - 19.10.2011, 14:57


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
stupidboy
Дата 19.10.2011, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 19.10.2011

Репутация: нет
Всего: нет



 Я так и сделал. Не помогает. А что, в WPF нельзя никака "ручками" програмно изменить размер окна?

P.s. Большое спасибо за внимание проявленное к моей проблеме!
PM MAIL   Вверх
RastaDja
Дата 19.10.2011, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



Цитата(stupidboy @  19.10.2011,  15:57 Найти цитируемый пост)
Я так и сделал. Не помогает.


Почему не помогает, не понятно. Может вы где-то явно указываете размеры, и скорее из-за этого все сбивается.
Цитата(stupidboy @  19.10.2011,  15:57 Найти цитируемый пост)
А что, в WPF нельзя никака "ручками" програмно изменить размер окна?

можно
Код

WindowName.Width = 200;
WindowName.Height = 200;



--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
stupidboy
Дата 19.10.2011, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 19.10.2011

Репутация: нет
Всего: нет



Код

WindowName.Width = 200;
WindowName.Height = 200;


Так к сожалению не работает. Не знаю даже почему. Уже пробовал и так и сяк.

А вы не знаете кто по идее должен вызывать OnRenderSizeChanged метод?
PM MAIL   Вверх
RastaDja
Дата 19.10.2011, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



http://msdn.microsoft.com/ru-ru/library/sy...izechanged.aspx
Зачем вам OnRenderSizeChanged? удалите его. Может из-за того, что вы его обрабатываете, у вас не изменяется размер. Подпишитесь на OnSizeChanged лучше

Это сообщение отредактировал(а) RastaDja - 19.10.2011, 16:19


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
stupidboy
Дата 19.10.2011, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 19.10.2011

Репутация: нет
Всего: нет



Совсем забыл сказать. Изначально параметр SizeToContent  у окна выставлен в Manual. Высота и ширина авто. Но оно (в описываемом мною случае) ресайзится без проблем. Значит ресайз уже реализован, и без использования SizeToContent. И видимо этот метод ресайза мешает стандартному SizeToContent. Так вот вопрос, а как еще можно заставить менять размер окна при изменении размеров контента без SizeToContent? Какие еще есть способы. У этого окна есть какой то стиль. Может там что прописано? И можно ли эти самые способы как нибудь нейтрализовать, что бы  SizeToContent заработал нормально. А еще у меня такое чувство, что Height и Width кто то переписывает, потому что не могу я их поменять.

Код


this.Height = 500;
this.Width = 500;


к примеру такой код, не меняет ничего. 
PM MAIL   Вверх
RastaDja
Дата 20.10.2011, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



Цитата(stupidboy @  19.10.2011,  18:45 Найти цитируемый пост)
Изначально параметр SizeToContent  у окна выставлен в Manual

а что мешает поставить его в WidthAndHeight?
Цитата(stupidboy @  19.10.2011,  18:45 Найти цитируемый пост)
Значит ресайз уже реализован, и без использования SizeToContent.

Это ваш проект, и если он уже реализован (имеется ввиду ресайз), то вы должны сами знать как это сделано. smile 
Цитата(stupidboy @  19.10.2011,  18:45 Найти цитируемый пост)
А еще у меня такое чувство, что Height и Width кто то переписывает, потому что не могу я их поменять.

Тут я не могу ничем помочь

З.Ы. Если проект маленький, то может стоит начать все сначала? или выложить код, ато совсем не ясно, как вы так окно настроили smile 

Это сообщение отредактировал(а) RastaDja - 20.10.2011, 09:15


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
stupidboy
Дата 21.10.2011, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 19.10.2011

Репутация: нет
Всего: нет



Проект к сожалению выложить не могу. Но проблему вроде как обошел, криво правда. При изменении размера ListBox я меняю 

ResizerControl.MinHeight. Конечно тупо, но работает. А почему по нормальному не работает, я так и не понял.

В любом случае, RastaDja,  огромное вам спасибо за помощь!!!!!!
PM MAIL   Вверх
RastaDja
Дата 21.10.2011, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



Цитата(stupidboy @  21.10.2011,  10:40 Найти цитируемый пост)
меняю 
ResizerControl.MinHeight

Что такое ResizerControl, и зачем он вам? Вот вам проектик, написан специально для вас. Посмотрите как он работает. Обратите внимание, на  два параметра ResizeMode="NoResize" SizeToContent="WidthAndHeight", они какраз делают все, что нужно

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  ExpandLictBox.rar 54,50 Kb


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
stupidboy
Дата 26.10.2011, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 19.10.2011

Репутация: нет
Всего: нет



RastaDja, огромное вам спасибо!!!!! smile 
PM MAIL   Вверх
Sbcuinst
Дата 7.11.2011, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 7.11.2011

Репутация: нет
Всего: нет



Я переписал код и всё работало... странно
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.1380 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.