Липсва вертикална лента за превъртане в групирания 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 по подразбиране в шаблона, защо трябва да променяте шаблона на listbox, ако всичко, което виждам, е ScrollViewer и StackPanel? И тогава ще предефинирате ItemPanelTemplate до WrapPanel.

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

Има статичен клас, наречен ScrollViewer, където можете да контролирате свойствата на неговия scrollviewer.

<ListBox ScrollViewer.VerticalScrollBarVisibility="Auto"/>
person 123 456 789 0    schedule 11.12.2013
comment
Здравей, Лео, брилянтно, благодаря за помощта, поправи го. Разбирам и твоето обяснение :) - person justdruit; 11.12.2013