Compartilhar via


Visão geral do expansor

Um Expander controle fornece uma maneira de fornecer conteúdo em uma área expansível que se assemelha a uma janela e inclui um cabeçalho.

Criando um expansor simples

O exemplo a seguir mostra como criar um controle simples Expander . Este exemplo cria um Expander que se parece com a ilustração anterior.

<Expander Name="myExpander" Background="Tan" 
          HorizontalAlignment="Left" Header="My Expander" 
          ExpandDirection="Down" IsExpanded="True" Width="100">
  <TextBlock TextWrapping="Wrap">
    Lorem ipsum dolor sit amet, consectetur
    adipisicing elit, sed do eiusmod tempor incididunt ut
    labore et dolore magna aliqua
  </TextBlock>
</Expander>

O Content e de um Expander também pode conter conteúdo complexo, como RadioButton e HeaderImage objetos.

Definindo a direção da área de conteúdo de expansão

Você pode definir a área de conteúdo de um Expander controle para expandir em uma das quatro direções (Down, , UpLeftou Right) usando a ExpandDirection propriedade. Quando a área de conteúdo é recolhida, somente o ExpanderHeader botão de alternância e seu botão de alternância são exibidos. Um Button controle que exibe uma seta direcional é usado como um botão de alternância para expandir ou recolher a área de conteúdo. Quando expandido, o tenta exibir todo o Expander seu conteúdo em uma área semelhante a uma janela.

Controlando o tamanho de um expansor em um painel

Se um controle estiver dentro de um Expander controle de layout que herda de Panel, como , não especifique a no Expander quando a HeightExpandDirection propriedade é definida como StackPanelDown ou Up. Da mesma forma, não especifique a no Expander quando a ExpandDirectionWidth propriedade é definida como Left ou Right.

Quando você define uma dimensão de tamanho em um Expander controle na direção em que o conteúdo expandido é exibido, o assume o Expander controle da área usada pelo conteúdo e exibe uma borda ao redor dele. A borda é mostrada mesmo quando o conteúdo está recolhido. Para definir o tamanho da área de conteúdo expandida, defina as dimensões de tamanho no conteúdo do , ou, se desejar o recurso de Expanderrolagem, no ScrollViewer que inclui o conteúdo.

Quando um controle é o último elemento em um DockPanelExpander , o Windows Presentation Foundation (WPF) define automaticamente as Expander dimensões para igualar a área restante do DockPanel. Para evitar esse comportamento padrão, defina a LastChildFillDockPanel propriedade no objeto como false, ou verifique se o não é o Expander último elemento em um DockPanelarquivo .

Criando conteúdo rolável

Se o conteúdo for muito grande para o tamanho da área de conteúdo, você poderá encapsular o conteúdo de um em um ExpanderScrollViewer para fornecer conteúdo rolável. O Expander controle não fornece automaticamente a capacidade de rolagem. A ilustração a seguir mostra um controle que contém um ExpanderScrollViewer controle.

Expansor em um ScrollViewer

Screenshot that shows an expander with ScrollBar.

Quando você coloca um controle em um ExpanderScrollViewer, defina a ScrollViewer propriedade dimension que corresponde à direção na qual o conteúdo é aberto para o Expander tamanho da área de Expander conteúdo. Por exemplo, se você definir a propriedade no para (a área de conteúdo é aberta), defina a ExpandDirectionScrollViewerExpanderHeight propriedade no controle para a altura necessária para Down a área de conteúdo. Se, em vez disso, você definir a dimensão de altura no próprio conteúdo, não reconhece essa configuração e, portanto, ScrollViewer não fornece conteúdo rolável.

O exemplo a seguir mostra como criar um controle que tem conteúdo complexo e que contém um ExpanderScrollViewer controle. Este exemplo cria um Expander que é como a ilustração no início desta seção.


void MakeExpander()
{
  //Create containing stack panel and assign to Grid row/col
  StackPanel sp = new StackPanel();
  Grid.SetRow(sp, 0);
  Grid.SetColumn(sp, 1);
  sp.Background = Brushes.LightSalmon;

  //Create column title
  TextBlock colTitle = new TextBlock();
  colTitle.Text = "EXPANDER CREATED FROM CODE";
  colTitle.HorizontalAlignment= HorizontalAlignment.Center;
  colTitle.Margin.Bottom.Equals(20);
  sp.Children.Add(colTitle);

  //Create Expander object
  Expander exp = new Expander();

  //Create Bullet Panel for Expander Header
  BulletDecorator bp = new BulletDecorator();
  Image i = new Image();
  BitmapImage bi= new BitmapImage();
  bi.UriSource = new Uri(@"pack://application:,,/images/icon.jpg");
  i.Source = bi;
  i.Width = 10;
  bp.Bullet = i;
  TextBlock tb = new TextBlock();
  tb.Text = "My Expander";
  tb.Margin = new Thickness(20,0,0,0);
  bp.Child = tb;
  exp.Header = bp;

  //Create TextBlock with ScrollViewer for Expander Content
  StackPanel spScroll = new StackPanel();
  TextBlock tbc = new TextBlock();
  tbc.Text =
          "Lorem ipsum dolor sit amet, consectetur adipisicing elit," +
          "sed do eiusmod tempor incididunt ut labore et dolore magna" +
          "aliqua. Ut enim ad minim veniam, quis nostrud exercitation" +
          "ullamco laboris nisi ut aliquip ex ea commodo consequat." +
          "Duis aute irure dolor in reprehenderit in voluptate velit" +
          "esse cillum dolore eu fugiat nulla pariatur. Excepteur sint" +
          "occaecat cupidatat non proident, sunt in culpa qui officia" +
          "deserunt mollit anim id est laborum.";
  tbc.TextWrapping = TextWrapping.Wrap;

  spScroll.Children.Add(tbc);
  ScrollViewer scr = new ScrollViewer();
  scr.Content = spScroll;
  scr.Height = 50;
  exp.Content = scr;

  exp.Width=200;
  exp.HorizontalContentAlignment= HorizontalAlignment.Stretch;
  //Insert Expander into the StackPanel and add it to the
  //Grid
  sp.Children.Add(exp);
  myGrid.Children.Add(sp);
}

Sub MakeExpander()

    'Create containing stack panel and assign to Grid row/col
    Dim sp As StackPanel = New StackPanel()
    Grid.SetRow(sp, 0)
    Grid.SetColumn(sp, 1)
    sp.Background = Brushes.LightSalmon

    'Create column title
    Dim colTitle As TextBlock = New TextBlock()
    colTitle.Text = "EXPANDER CREATED FROM CODE"
    colTitle.HorizontalAlignment = HorizontalAlignment.Center
    colTitle.Margin.Bottom.Equals(20)
    sp.Children.Add(colTitle)

    'Create Expander object
    Dim exp As Expander = New Expander()

    'Create Bullet Panel for Expander Header
    Dim bp As BulletDecorator = New BulletDecorator()
    Dim i As Image = New Image()
    Dim bi As BitmapImage = New BitmapImage()
    bi.UriSource = New Uri("pack://application:,,./images/icon.jpg")
    i.Source = bi
    i.Width = 10
    bp.Bullet = i
    Dim tb As TextBlock = New TextBlock()
    tb.Text = "My Expander"
    tb.Margin = New Thickness(20, 0, 0, 0)
    bp.Child = tb
    exp.Header = bp

    'Create TextBlock with ScrollViewer for Expander Content
    Dim spScroll As StackPanel = New StackPanel()
    Dim tbc As TextBlock = New TextBlock()
    tbc.Text = _
            "Lorem ipsum dolor sit amet, consectetur adipisicing elit," + _
            "sed do eiusmod tempor incididunt ut labore et dolore magna" + _
            "aliqua. Ut enim ad minim veniam, quis nostrud exercitation" + _
            "ullamco laboris nisi ut aliquip ex ea commodo consequat." + _
            "Duis aute irure dolor in reprehenderit in voluptate velit" + _
            "esse cillum dolore eu fugiat nulla pariatur. Excepteur sint" + _
            "occaecat cupidatat non proident, sunt in culpa qui officia" + _
            "deserunt mollit anim id est laborum."
    tbc.TextWrapping = TextWrapping.Wrap

    spScroll.Children.Add(tbc)
    Dim scr As ScrollViewer = New ScrollViewer()
    scr.Content = spScroll
    scr.Height = 50
    exp.Content = scr

    'Insert Expander into the StackPanel and add it to the
    'Grid
    exp.Width = 200
    exp.HorizontalContentAlignment = HorizontalAlignment.Stretch
    sp.Children.Add(exp)
    myGrid.Children.Add(sp)
End Sub

<Expander Width="200" HorizontalContentAlignment="Stretch">
   <Expander.Header>
     <BulletDecorator>
       <BulletDecorator.Bullet>
         <Image Width="10" Source="images\icon.jpg"/>
       </BulletDecorator.Bullet>
       <TextBlock Margin="20,0,0,0">My Expander</TextBlock>
     </BulletDecorator>
   </Expander.Header>
   <Expander.Content>
     <ScrollViewer Height="50">
       <TextBlock TextWrapping="Wrap">
         Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
         sed do eiusmod tempor incididunt ut labore et dolore magna 
         aliqua. Ut enim ad minim veniam, quis nostrud exercitation 
         ullamco laboris nisi ut aliquip ex ea commodo consequat. 
         Duis aute irure dolor in reprehenderit in voluptate velit 
         esse cillum dolore eu fugiat nulla pariatur. Excepteur sint 
         occaecat cupidatat non proident, sunt in culpa qui officia 
         deserunt mollit anim id est laborum.
       </TextBlock>
     </ScrollViewer>
   </Expander.Content>
 </Expander>


Usando as propriedades de alinhamento

Você pode alinhar o conteúdo definindo as HorizontalContentAlignment propriedades e VerticalContentAlignment no Expander controle. Quando você define essas propriedades, o alinhamento se aplica ao cabeçalho e também ao conteúdo expandido.

Confira também