Отсутствует вертикальная полоса прокрутки в сгруппированном WPF ListBox

Привет, извините, если это очевидный вопрос; Я довольно новичок в WPF. Я пытаюсь создать «сгруппированный» список, похожий на изображение ниже. С помощью Google мне почти удалось заставить его работать, за исключением того, что по какой-то причине я получаю видимую вертикальную полосу прокрутки. У кого-нибудь есть идеи? Это сводит меня с ума! Спасибо

пример сгруппированного ListBox

Код, который я использую, выглядит следующим образом:

public class SampleData
{
    public string Name { get; set; }
    public string Group { get; set; }

    public SampleData(string name, string group)
    {
        this.Name = name;
        this.Group = group;
    }
}


public partial class MainWindow : Window
{
    private ObservableCollection<SampleData> _items = new ObservableCollection<SampleData>();

    public ObservableCollection<SampleData> Items
    {
        get { return _items; }
    }

    public MainWindow()
    {
        InitializeComponent();

        _items.Add(new SampleData("Item1", "Group1"));
        _items.Add(new SampleData("Item2", "Group1"));
        _items.Add(new SampleData("Item3", "Group1"));
        _items.Add(new SampleData("Item4", "Group1"));
        _items.Add(new SampleData("Item5", "Group1"));
        _items.Add(new SampleData("Item6", "Group1"));

        _items.Add(new SampleData("Item7", "Group2"));
        _items.Add(new SampleData("Item8", "Group2"));
        _items.Add(new SampleData("Item9", "Group2"));
        _items.Add(new SampleData("Item10", "Group2"));
        _items.Add(new SampleData("Item11", "Group2"));
        _items.Add(new SampleData("Item12", "Group2"));
        _items.Add(new SampleData("Item13", "Group2"));
        _items.Add(new SampleData("Item14", "Group2"));
    }
}

и в xaml,

  <CollectionViewSource x:Key="groupedSampleData" Source="{Binding ElementName=main, Path=Items }">
    <CollectionViewSource.GroupDescriptions>
      <PropertyGroupDescription PropertyName="Group" />
    </CollectionViewSource.GroupDescriptions>
  </CollectionViewSource>

  <Style x:Key="LBStyle" TargetType="{x:Type ListBox}">
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    <Setter Property="ScrollViewer.CanContentScroll" Value="True"/>
    <Setter Property="ScrollViewer.PanningMode" Value="VerticalOnly"/>
  </Style>


<ListBox Grid.Row="0" Style="{StaticResource LBStyle}" ItemsSource="{Binding Source={StaticResource groupedSampleData}}" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="0" >
  <ListBox.Template>
    <ControlTemplate TargetType="{x:Type ListBox}">
      <ScrollViewer CanContentScroll="True" VerticalScrollBarVisibility="Auto" PanningMode="VerticalOnly">
        <StackPanel>
          <ItemsPresenter/>
        </StackPanel>
      </ScrollViewer>
    </ControlTemplate>
  </ListBox.Template>

  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <StackPanel>
        <Border Width="96" Height="96" Margin="4" Background="#DDD"/>
        <TextBlock Margin="4,0,4,4" Text="{Binding Path=Name}" HorizontalAlignment="Center"/>
      </StackPanel>
    </DataTemplate>
  </ItemsControl.ItemTemplate>

  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>

  <ItemsControl.GroupStyle>
    <GroupStyle>
      <GroupStyle.Panel>
        <ItemsPanelTemplate>
          <VirtualizingStackPanel/>
        </ItemsPanelTemplate>
      </GroupStyle.Panel>
      <GroupStyle.HeaderTemplate>
        <DataTemplate>
          <TextBlock Margin="4,16,4,4" FontWeight="Bold" FontSize="15" Text="{Binding Path=Name}"/>
        </DataTemplate>
      </GroupStyle.HeaderTemplate>
    </GroupStyle>
  </ItemsControl.GroupStyle>
</ListBox>

person justdruit    schedule 11.12.2013    source источник


Ответы (1)


Удали это

<ListBox.Template>
    <ControlTemplate TargetType="{x:Type ListBox}">
      <ScrollViewer CanContentScroll="True" VerticalScrollBarVisibility="Auto" PanningMode="VerticalOnly">
        <StackPanel>
          <ItemsPresenter/>
        </StackPanel>
      </ScrollViewer>
    </ControlTemplate>
</ListBox.Template>

В Listbox есть собственный просмотрщик прокрутки по умолчанию внутри шаблона, зачем вам менять шаблон списка, если все, что я вижу, это ScrollViewer и StackPanel? Затем вы переопределите ItemPanelTemplate в WrapPanel.

<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel />
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

Существует статический класс ScrollViewer, в котором вы можете управлять свойствами его средства просмотра прокрутки.

<ListBox ScrollViewer.VerticalScrollBarVisibility="Auto"/>
person 123 456 789 0    schedule 11.12.2013
comment
Привет, Лео, молодец, спасибо за помощь, все исправлено. Я тоже понял ваше объяснение :) - person justdruit; 11.12.2013