Поделиться через


Общие сведения о расширителе

Элемент управления Expander обеспечивает способ предоставления содержимого в развертываемой области, имеющей вид окна и включающей заголовок.

Создание простого элемента управления Expander

В примере ниже показано, как создать простой элемент управления Expander. В этом примере создается Expander, который выглядит, как на предыдущей иллюстрации.

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

Элементы Content и HeaderExpander могут также содержать сложное содержимое, например объекты RadioButton и Image.

Задание направления развертывания области содержимого

Область содержимого элемента управления Expander можно задать для расширения в одном из четырех направлений (Down, Up, Left или Right) с помощью свойства ExpandDirection. При сворачивании области содержимого отображается только ExpanderHeader и выключатель. Элемент управления Button, отображающий стрелку направления, используется в качестве выключателя, чтобы развернуть или свернуть область содержимого. При развертывании Expander пытается отобразить все содержимое в области, подобной окну.

Управление размером элемента управления Expander на панели

Если элемент управления Expander находится внутри элемента управления макета, наследующего от Panel, например StackPanel, не указывайте Height в Expander, если свойство ExpandDirection задано равным Down или Up. Аналогичным образом не указывайте значение Width в Expander, если свойство ExpandDirection задано равным Left или Right.

Если задается размерность элемента управления Expander в направлении отображения развернутого содержимого, то Expander принимает управление областью, которая используется содержимым, и отображает рамку вокруг нее. Рамка отображается даже тогда, когда содержимое свернуто. Чтобы установить размер развернутой области содержимого, задайте размерности для содержимого Expander или, если требуется возможность прокрутки, для элемента ScrollViewer, вмещающего содержимое.

Если элемент управления Expander является последним элементом DockPanel, Windows Presentation Foundation (WPF) автоматически задает измерения Expander равными оставшейся области DockPanel. Во избежание подобного поведения по умолчанию задайте свойство LastChildFill в объекте DockPanel равным false или убедитесь, что Expander не является последним элементом DockPanel.

Создание прокручиваемого содержимого

Если содержимое слишком велико для области содержимого, можно перенести содержимое Expander в ScrollViewer и сделать содержимое доступным для прокрутки. Элемент управления Expander не предоставляет возможность прокрутки автоматически. На следующем рисунке показан элемент управления Expander, содержащий элемент управления ScrollViewer.

Expander в ScrollViewer

Screenshot that shows an expander with ScrollBar.

При размещении элемента управления Expander в ScrollViewer задайте свойство измерения ScrollViewer, которое бы соответствовало направлению, в котором открывается содержимое Expander, в зависимости от размера области содержимого Expander. Например, если задать свойство ExpandDirection в Expander равным Down (область содержимого открывается вниз), то для свойства Height в элементе управления ScrollViewer нужно задать значение, равное требуемой высоте области содержимого. Если вместо этого вы зададите измерение высоты в самом содержимом, ScrollViewer не распознает эту настройку и, следовательно, не обеспечит возможность прокрутки содержимого.

В следующем примере показано создание элемента управления Expander со сложным содержимым и элементом управления ScrollViewer. В этом примере создается элемент управления Expander, подобный показанному на рисунке в начале этого раздела.


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>


Использование свойств выравнивания

Содержимое можно выровнять, задав свойства HorizontalContentAlignment и VerticalContentAlignment элемента управления Expander. При задании этих свойств выравнивание применяется к заголовку и развернутому содержимому.

См. также