Сбросить Expander к поведению сворачивания по умолчанию

StackOverflow https://stackoverflow.com/questions/159470

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

В документации экспандера говорится:

«Чтобы Expander работал правильно, не указывайте высоту в элементе управления Expander, если для свойства ExpandDirection установлено значение Down или Up.Аналогичным образом не указывайте ширину элемента управления Expander, если для свойства ExpandDirection установлено значение Left или Right.Когда вы устанавливаете размер элемента управления Expander в направлении отображения развернутого содержимого, область, определяемая параметром размера, отображается с рамкой вокруг нее.Эта область отображается, даже если окно свернуто.Чтобы установить размер развернутого окна, установите размеры содержимого элемента управления Expander или ScrollViewer, который окружает содержимое».

Это было полезно?

Решение 2

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

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

Другие советы

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

Спасибо

Отвечаю немного поздно (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;
    }

Когда Expander свернут, я сохраняю фиксированную ширину Column2 (которая была где-то автоматически волшебным образом изменена с Auto в фоновом режиме), а затем сбрасываю ширину на 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>

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top