Сбросьте Expander к стандартному поведению свертывания - PullRequest
1 голос
/ 02 октября 2008

Я использую расширитель внутри Resizer (ContentControl с захватом изменения размера), и он правильно разворачивается / сворачивается, когда элемент управления изначально появляется. Как только я изменю его размер, Expander не будет правильно разрушаться, как описано ниже. Я запустил Snoop для своего приложения и не вижу никаких высот, установленных на Expander или его составляющих.

Как мне убедить Expander снова правильно рухнуть? Или изменение Resizer, чтобы не вызывать грусть Expander, также сработало бы.

В документации на расширитель написано:

"Чтобы расширитель работал правильно, не указывайте высоту в элементе управления Expander, если для свойства ExpandDirection установлено значение« Вниз »или« Вверх ». Аналогичным образом, не указывайте« Ширина »для элемента управления Expander, если для свойства ExpandDirection установлено значение« Левый ». или вправо. При установке размера в элементе управления Expander в направлении, в котором отображается расширенное содержимое, область, определяемая параметром размера, отображается с рамкой вокруг него. Эта область отображается, даже если окно свернуто. установите размер развернутого окна, задайте размеры для содержимого элемента управления Expander или ScrollViewer, в который входит содержимое. "

Ответы [ 4 ]

1 голос
/ 14 декабря 2010

Отвечая на это немного поздно (2+ года), но, эй, лучше поздно, чем никогда, верно?

Так или иначе, я столкнулся с этой проблемой и смог решить ее с помощью некоторого кода, чтобы сохранить и сбросить ширину столбцов.

У меня есть трехколонная сетка, с некоторым содержимым в первом столбце, GridSplitter во втором столбце и Expander в третьем столбце. Похоже, происходит то, что после перемещения GridSplitter ширина столбца, содержащего Expander, изменяется с Auto на фиксированный размер. Это приводит к тому, что Expander больше не падает, как ожидалось.

Итак, я добавил приватную переменную и два обработчика событий:

    private GridLength _columnWidth;

    private void Expander_Expanded (object sender, RoutedEventArgs e)
    {
        // restore column fixed size saved in Collapse event
        Column2.Width = _columnWidth;
    }

    private void Expander_Collapsed (object sender, RoutedEventArgs e)
    {
        // save current column width so we can restore when expander is expanded
        _columnWidth = Column2.Width;

        // reset column width to auto so the expander will collapse properly
        Column2.Width = GridLength.Auto;
    }

Когда расширитель свернут, я сохраняю фиксированную ширину Column2 (которая была изменена с Auto-magical на заднем фоне), а затем сбрасываю ширину на Auto.

Затем, когда расширитель расширяется, я восстанавливаю столбец обратно на фиксированную ширину, чтобы он расширялся до той же ширины, которая была до его свертывания.

Вот XAML для справки:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition x:Name="Column2" Width="Auto" />
    </Grid.ColumnDefinitions>
    <ScrollViewer Grid.Column="0" VerticalScrollBarVisibility="Auto">
        <!-- some content goes here -->
    </ScrollViewer>
    <GridSplitter HorizontalAlignment="Right" VerticalAlignment="Stretch"
         Grid.Column="1" ResizeBehavior="PreviousAndNext" Width="5"
         Background="Black" />
    <Expander Grid.Column="2" ExpandDirection="Left"
         IsExpanded="True" Style="{StaticResource LeftExpander}"
         Expanded="Expander_Expanded" Collapsed="Expander_Collapsed">
        <Grid>
            <TextBox TextWrapping="Wrap" Height="Auto" Margin="0 5 5 5" />
        </Grid>
    </Expander>
</Grid>
1 голос
/ 08 февраля 2009

У меня не было шансов смоделировать эту конкретную проблему с тех пор, но я недавно обнаружил, что при установке высоты или ширины значение Double.NaN сбрасывает его по умолчанию в свободном духе.

По иронии судьбы, это было от чтения кода элемента управления Resizer, который я использовал в первую очередь.

1 голос
/ 02 октября 2008

Я решил проблему, переместив Resizer в Expander, но я столкнулся с проблемой Expander в другом месте, поэтому все равно хотел бы получить ответ, если у кого-то есть.

спасибо

0 голосов
/ 14 ноября 2008

Я столкнулся с подобной проблемой, используя Expander внутри Grid с GridSplitter. Поведение «развернуть / свернуть» работает нормально, пока я не переместлю сплиттер ... После этого расширитель не рухнет, он только скрывает свое содержимое.

Я все еще ищу обходной путь ... Вы в конце концов нашли его?

...