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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое задание высоты (Height), не работает почему-то 
:(
    Опции темы
San4o_Pan4o
Дата 22.12.2009, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем привет! У меня какая-то странная штука случилась, даже не думал что может такая элементарная вещь не работать.. Есть DockPanel  с двумя панелями внутри, нижняя меняет высоту, верхняя - работает по принципу LastChildFill=True. То есть лэйаут диктует нижняя панель. В ней ListView и он у меня либо высоты 80 либо высоты как весь DockPanel (использую DockPanel.ActualHeight).
Вот код разметки:
Код

<DockPanel x:Name="center_dock" LastChildFill="True">
                
                <!-- Основной ListView -->
                <ListView x:Name="main_ListView" ScrollViewer.VerticalScrollBarVisibility="Auto" ItemTemplate="{StaticResource OneTileItem}" 
BorderBrush="{x:Null}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" DockPanel.Dock="Bottom" 
SelectionChanged="main_ListView_SelectionChanged"/>
                              
                <!-- Панель пердпросмотра -->
                <ContentControl x:Name="previewPanel" DockPanel.Dock="Top" VerticalAlignment="Stretch" Height="Auto">
                    <ContentControl.Style>
                        <Style TargetType="{x:Type ContentControl}">
                            <Setter Property="Template" Value="{StaticResource textPreview}"/>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Path=Type}" Value="photo-doc">
                                    <Setter Property="Template" Value="{StaticResource photoPreview}" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </ContentControl.Style>
                </ContentControl>

</DockPanel>

А вот все места в коде, где добавляю динамику:
Код

private bool is_bottom_fixed = false; // флаг. Если он true - значит ListView высоты 80, иначе ListView.Height=DockPanel.ActualHeight


//по умолчанию высота ListView на максимуме
private void Window_Loaded(object sender, RoutedEventArgs e)
{
            main_ListView.Height = center_dock.ActualHeight;
}

//потом в какой-то момент уменьшаем высоту до 80, пока все ок
 private void singleItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
            if (e.ClickCount == 2)
            {
                if (((Border)sender).Tag.ToString() != "" || ((Border)sender).Tag.ToString() != null)
                {
                    MainListViewItem mlvi = main_ListView.SelectedItem as MainListViewItem;
                    if (mlvi.Type == "photo-doc") //запустить предпросмотр
                    {
                        AnimateHeightDouble(main_ListView, main_ListView.ActualHeight, 80, .2);
                        is_bottom_fixed = true;
                    }
                }
            }
            else
            {
                return;
            }
}

// при ресайзе окна высоту сохраняем в зависимости от флага, пока тоже все ок
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
            if (!is_bottom_fixed)
            {
                main_ListView.Height = center_dock.ActualHeight;
            }
            else if (is_bottom_fixed)
            {
                main_ListView.Height = 80;
            }
            else return;
}

//НО, как только обратно увеличиваю высоту с 80 на всю высоту DockPanel, то при ресайзе высота не переприсваивается!
private void photo_preview_EditBtn_Click(object sender, RoutedEventArgs e)
{
            AnimateHeightDouble(main_ListView, 80, center_dock.ActualHeight, .2);
            is_bottom_fixed = false;
}

//Анимация на всякий случай
private void AnimateHeightDouble(FrameworkElement ctrl, double from, double to, double time)
{
            DoubleAnimation dba = new DoubleAnimation();
            dba.From = from;
            dba.To = to;
            dba.Duration = TimeSpan.FromSeconds(time);
            ctrl.BeginAnimation(FrameworkElement.HeightProperty, dba);
}

Не пойму почему не происходит переприсваивания высоты. Т.е. если в момент увеличивающей анимации center_dock.ActualHeight был 400, то он потом всегда 400 при ресайзе окна. А нужно,  чтобы менялся вместе с ActualHeight. Помогите, срочно нужно((

Это сообщение отредактировал(а) San4o_Pan4o - 22.12.2009, 14:26
PM MAIL   Вверх
San4o_Pan4o
Дата 23.12.2009, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



up.. 
PM MAIL   Вверх
San4o_Pan4o
Дата 6.1.2010, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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


 




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


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

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