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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с Measure 
:(
    Опции темы
AleksPingvin
Дата 5.12.2011, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть UserControl который представляет некий заголовок, под которым находятся куча данных. У источника данных объекта есть поле Collapsed( нотифайное разумеется) , которое показывает, на то, как показывать объект - свернутым (только заголовок) или нет.
Примерно так:

Код

<StackPanel Name="container" Visibility="Visible">
....
</StackPanel>
....
....
....
<DataTriger Binding="{Binding Collapsed}" Value="True">
<Setter TargetName="container" Property="Visibility" Value="Collapsed"/>
</DataBinding>


Пишу свой контейнер, в методах MeasureOverride и AverrageOverride мне в случае если мой объект цельный и развернутый  не влезает в контейнер, то его надо свернуть.

Пишу примерно такой код (фрагмент AverrageOverride):

Код

MyData data = curItem.DataContext as MyData;
item.Measure(...);
if (item.DesiredSize.Height > lastHeight)
{
data.Collapsed = true;
item.Measure(....);
....
}

Так вот после изменения значения поля Collapsed и последующего измерения DesiredSize не изменилось. Да и визуально итем тоже не изменился.
Как быть?
Для теста вешал на клавишу изменения этого поля, в обычном контейнере все работает. Объект сворачивается и разворачивается. Но мне надо именно в MeasureOverride и AverrageOverride сколько будет занимать элемент в свернутом или не свернутом виде. Подскажите как быть?

Это сообщение отредактировал(а) AleksPingvin - 5.12.2011, 15:54
PM MAIL   Вверх
Gvozdin
Дата 5.12.2011, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 9.8.2011
Где: Москва

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



Значит если ваш контейнер(который вместо StackPanel Name="container") не помещается целиком в availableSize в ArrangeOverride, то вы идете в дата контекст и устанавливаете там Collapsed = true.

А почему вы думаете что Visibility вашей панели должен как-то повлиять на DesiredSize у ваших дочерних элементов? Вы спрашиваете их сколько они ХОТЯТ занять места, они и отвечают сколько они хотят.

Если вы хотите что бы панель скрывалась когда она полностью не входит в контейнер то я бы предложил другой вариант:
1. Создаете dependency property HeighIsNotEnoughtForMe
2. В ArrangeOverride, если заданный availableSize вам мал, устанавливаете HeighIsNotEnoughtForMe = true
3. Тригером по HeighIsNotEnoughtForMe делаете вашей панели Visibility=Collapsed
--------------------
http://gvozdin.ru
PM MAIL WWW   Вверх
AleksPingvin
Дата 5.12.2011, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я опечатался в коде )) везде item это curItem. Т.е я беру итем и у его данных меняю свойство и жду изменентя его размеров
PM MAIL   Вверх
Gvozdin
Дата 5.12.2011, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 9.8.2011
Где: Москва

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



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


 




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


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

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