Pergunta

Eu estou usando um expansor dentro de um Resizer (a ContentControl com uma pinça de redimensionamento), e ele se expande / colapsos corretamente quando o controle inicialmente vem à tona. Uma vez que eu redimensioná-la, o Expander não vai corretamente entrar em colapso, como documentado abaixo. Corri Snoop sobre o meu pedido, e eu não vejo nenhum alturas definidas em Expander ou seus constituintes.

Como eu iria sobre convencer Expander a entrar em colapso corretamente novamente? Ou modificar Resizer não fazer Expander triste iria funcionar tão bem.

documentação Expander diz:

"Para um Expander para funcionar corretamente, não especifique um Height no controle Expander quando a propriedade ExpandDirection está definido para baixo ou para cima. Da mesma forma, não especificar uma largura no controle Expander quando a propriedade ExpandDirection está definido para a esquerda ou Direita. quando você definir um tamanho no controle Expander no sentido de que o conteúdo expandido é exibido, a área que é definida pelo parâmetro tamanho é apresentada com uma margem em torno dele. Esta área exibe mesmo quando a janela é recolhido. Para definir o tamanho da janela expandida, dimensões de tamanho definido no conteúdo do controle Expander ou o ScrollViewer que inclui o conteúdo ".

Foi útil?

Solução 2

Eu não tive a oportunidade de zombar-se esta questão em particular desde então, mas eu descobri recentemente que a definição de altura ou largura para Double.NaN redefine-lo ao seu comportamento de espírito livre padrão.

Ironicamente, esta foi a partir da leitura do código do controle Resizer eu estava usando em primeiro lugar.

Outras dicas

Eu resolvi o problema movendo o Resizer dentro do Expander, mas eu tenho que correr para a questão Expander em outros lugares, isso seria ainda como uma resposta se alguém tem.

graças

A resposta a esta um pouco tarde (2 + anos), mas, hey, melhor tarde do que nunca, certo?

De qualquer forma, eu corri para este problema exato e foi capaz de resolvê-lo com algum código-behind para salvar e larguras de coluna de reset.

I têm um 3 numa coluna da grade, com um conteúdo na primeira coluna, o GridSplitter na segunda coluna, e o expansor na terceira coluna. Parece que o que está acontecendo é que, após o GridSplitter é movido a largura da coluna que contém o Expander é alterado de Auto para um tamanho fixo. Isso faz com que o Expander para não mais colapso como esperado.

Então, eu adicionei uma variável privada e dois manipuladores de eventos:

    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;
    }

Quando o Expander é recolhido I save largura fixa de Column2 (que foi alterado de Auto auto-magicamente no algum lugar fundo), em seguida, redefinir a largura para Auto.

Em seguida, quando o expansor está expandida, para restaurar a parte de trás da coluna para a largura fixo por isso expande-se para a mesma largura do que era antes de ter sido recolhido.

Aqui está o XAML para referência:

<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>

Eu corri para um problema semelhante usando um Expander dentro de uma grade com um GridSplitter. O comportamento expandir / recolher fina funciona até que eu mover o divisor ... Depois, o Expander não vai entrar em colapso, ele só esconde o seu conteúdo.

Eu ainda estou procurando uma solução alternativa ... você eventualmente encontrar um?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top