2015-11-19 232 views
0

我有一个列表框,其中包含一些元素。C#WPF垂直列表框不显示垂直滚动条

<StackPanel Orientation="Vertical" Grid.Row="0" > 
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> 
     <TextBlock x:Name="lbGroups" Text="PartPrograms Groups" FontSize="{StaticResource TEXTBOX_TITLE_FONTSIZE}" FontWeight="Bold" Margin="20" HorizontalAlignment="Left" VerticalAlignment="Center" TextAlignment="Center" Grid.Row="1"/> 
     <Button x:Name="btAddGroup" Content="&#xF055;" FontSize="{StaticResource TEXTBOX_BIGBUTTON_FONTSIZE}" Background="{x:Null}" BorderBrush="{x:Null}" Click="Button_Click"/> 
     <Button Name="btDeleteGroup" Content="&#xF057;" FontSize="{StaticResource TEXTBOX_BIGBUTTON_FONTSIZE}" Background="{x:Null}" BorderBrush="{x:Null}" Click="Button_Click"/> 
     <Button x:Name="btGroupDown" Content="&#xF0AB;" FontSize="{StaticResource TEXTBOX_BIGBUTTON_FONTSIZE}" Background="{x:Null}" BorderBrush="{x:Null}" Click="Button_Click"/> 
     <Button Name="btGroupUp" Content="&#xF0AA;" FontSize="{StaticResource TEXTBOX_BIGBUTTON_FONTSIZE}" Background="{x:Null}" BorderBrush="{x:Null}" Click="Button_Click"/> 
    </StackPanel> 
    <ListBox Name="lbPPgroups" Background="{x:Null}" Margin="0" ScrollViewer.VerticalScrollBarVisibility="Visible"> 
    </ListBox> <------- this is the listbox 
</StackPanel> 

元素以编程方式添加到列表框与此:

void AddNewPartProgramGroup(String strContent, String strNotes, String strPathImage, bool IsChecked=false) 
      { 
        StackPanel sp = new StackPanel(); 
        string currentDir = AppDomain.CurrentDomain.BaseDirectory.ToString(); 
        ToggleButton toggleButton = new ToggleButton() 
        { 
          Content = strContent, 
          Height = IMAGES_ROW_HEIGHT/GOLDEN_RATIO, 
          Width = IMAGES_ROW_HEIGHT, 
          FontSize = 10, 
          Background = null, 
          Tag = "bt" + strContent, 
          ToolTip = strNotes, 
          Margin = new Thickness(BUTTON_MARGIN), 
          IsChecked = IsChecked 
        }; 
        toggleButton.Click += new RoutedEventHandler(ToggleButton_Click); 

        sp.Children.Add(toggleButton); 
        Image newResizedImage = ImageUtilities.StrPath2ResizedImageSizeHeight(strPathImage, IMAGES_ROW_HEIGHT); 
        sp.Children.Add(newResizedImage); 
        sp.Orientation = Orientation.Horizontal; 
        sp.HorizontalAlignment = HorizontalAlignment.Left; 

        this.lbPPgroups.Items.Add(sp);<------ here I add elements 

        var newGroup = new PcDmisData.Group(); 
        newGroup.Description = strContent; 
        var newImage = new PcDmisData.MyImage(); 
        newImage.Image = newResizedImage; 
        newImage.IsImageEmbedded = false; 

        newGroup.myImage = newImage; 
        newGroup.Notes = strNotes; 
        EasyRunData.lstPPgroups.Add(newGroup); 
      } 

问题增加了一些元素后,我无法看到列表框的垂直滚动条: enter image description here

我也尝试添加一个垂直滚动查看器,但没有奏效。 Thanx的任何帮助 PAtrick

+0

检查StackPanel的父面板的宽度。它不应该大于窗口的宽度。 – tgpdyk

回答

1

所以问题是,外部StackPanel没有真正的MaxHeight和高度自动更新。 ScrollBar仅在该面板高度达到特定限制时出现。要解决这个问题,你可以玩MaxHeight ...

我会推荐使用DockPanel。

<Grid> 
    <DockPanel Grid.Row="0" > 
     <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" HorizontalAlignment="Left"> 
      <TextBlock x:Name="lbGroups" Text="PartPrograms Groups" FontWeight="Bold" Margin="20" HorizontalAlignment="Left" VerticalAlignment="Center" TextAlignment="Center"/> 
      <Button Name="btGroupUp" Click="btGroupUp_Click" Margin="2,2,2,2" Width="30"/> 
     </StackPanel> 
     <ListBox Name="lbPPgroups" Margin="0" ScrollViewer.VerticalScrollBarVisibility="Auto"/> 
    </DockPanel> 
</Grid> 

只是为了后面的代码示例:

private void btGroupUp_Click(object sender, RoutedEventArgs e) 
    { 
     for (var i=1;i<50;i++) 
     { 
      TextBox box = new TextBox(); 
      box.Text = "Hello World " + i ; 
      lbPPgroups.Items.Add(box); 
     } 
    } 

在这个例子中我设置ScrollViewer.VerticalScrollBarVisibility="Auto"这样滚动条在需要的时候才会出现。但是您也可以将其设置为"Visible"

+0

非常感谢。我只需要设置它的高度和滚动条出现! – Patrick