title: How to make WrapPanel to show vertical scrollbar when children are full with or without ScrollViewer
body: <p>I have a WrapPanel and buttons are programmatically created and added as children of the WrapPanel. So, I want to show vertical scrollbar when the WrapPanel is full of buttons (children) to be able to add more buttons continuously.</p>
  
  <p>If we need a scrollbar shown, do we have to bring ScrollViewer? Isn't there a way without ScrollViewer? What I want to get is, because the WrapPanel is of small size, I want a scrollbar to be shown only when needed (like full of children).</p>
  
  <p>My code is simple as below (WrapPanel inside Grid and the Grid is inside TabControl)</p>
  
  <p>Many thanks always for your excellence.</p>
  
  <p><strong>Update:</strong> I struggled in finding solution on internet for even several days. And I tried put WrapPanel inside ScrollViewer. However, though I set the VerticalScroll to auto, the vertical scrollbar is always shown even when the WrapPanel doesn't have any children.</p>
  
  <p>Furthermore, when I intentionally make the WrapPanel full of children (buttons), the vertical scrollbar of ScrollViewer doesn't provide scrolldown availability.
  And the buttons at the bottom line of WrapPanel shown cut and more, I can't scroll down to see beyond the button at the bottom line. I made buttons to be placed beyond the bottom line of WrapPanel intentionally.</p>
  
  <p>With or without, I want the vertical scrollbar to be shown when only needed (full of children). It seems very easy to be done. But it's difficult to make it work properly.</p>
  
  <p><strong>Solution:</strong> was provided by Mr. Henk Holterman</p>
  
  <pre><code>                    &lt;DropShadowEffect/&gt;
                  &lt;/Button.Effect&gt;
              &lt;/Button&gt;
              &lt;WrapPanel x:Name="WrapPanelGreen" HorizontalAlignment="Left" Height="180" VerticalAlignment="Top" Width="232" UseLayoutRounding="True" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto"/&gt;
          &lt;/Grid&gt;
      &lt;/TabItem&gt;
  &lt;/TabControl&gt;
  </code></pre>
  
  <p>And below is my simple code which make button programmatically and add as a child of WrapPanel.</p>
  
  <pre><code>for (int k = 0; k &lt; Overviews.Length; k++)
  {
      Button btnoverviewcontent = new Button();
  
      ToolTip tt = new ToolTip();
      tt.Content = "Press this button if you want to modify or delete.";
      btnoverviewcontent.ToolTip = tt;
  
      btnoverviewcontent.Cursor = Cursors.Hand;
  
      SolidColorBrush mySolidColorBrush = new SolidColorBrush();
      mySolidColorBrush.Color = Color.FromArgb(255, 101, 173, 241);
      btnoverviewcontent.Background = mySolidColorBrush;
  
      btnoverviewcontent.Effect = new DropShadowEffect
      {
          Color = new Color { A = 255, R = 0, G = 0, B = 0 },
          Direction = 315,
          ShadowDepth = 5,
          Opacity = 1
      };
  
      btnoverviewcontent.Padding = new Thickness(3, 3, 3, 3);
      btnoverviewcontent.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch;
      TextBlock textBlock = new TextBlock()
      {
          Text = Overviews[k],
          TextAlignment = TextAlignment.Left,
          TextWrapping = TextWrapping.Wrap,
  
      };
  
      btnoverviewcontent.Content = textBlock;
      btnoverviewcontent.BorderThickness = new Thickness(0, 0, 0, 0);
      btnoverviewcontent.FontStretch = FontStretches.UltraExpanded;
      btnoverviewcontent.Margin = new Thickness(5, 5, 5, 5);
  
      WrapPanelGreen.Children.Add(btnoverviewcontent);
      btnoverviewcontent.Click += new RoutedEventHandler(OnOverviewClick);
  </code></pre>