Горизонтальный многострочный список ListBox (WPF) - PullRequest
1 голос
/ 20 января 2020

Я хочу реализовать горизонтальный ListBox с несколькими строками.

Используя WrapPanel:

<ListBox>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

Я получаю следующий результат:

enter image description here

Но я ищу этот результат:

enter image description here

Как я могу реализовать это?

1 Ответ

0 голосов
/ 20 января 2020

На основании ваших комментариев я сделал UniformGrid, который корректирует количество строк / столбцов при каждом изменении размера окна.

MainWindow.xaml:

<Grid x:Name="Container">
    <ListBox HorizontalContentAlignment="Stretch">
          <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid x:Name="ItemsGrid" Loaded="ItemsGrid_Loaded" />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
    </ListBox>
</Grid>

Имена и события важны. Они используются для настройки столбцов / строк в файле кода.

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    private UniformGrid itemsGrid;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void ItemsGrid_Loaded(object sender, RoutedEventArgs e)
    {
        // Set reference and adjust columns/rows once the UniformGrid is loaded.
        itemsGrid = sender as UniformGrid;
        ((UniformGrid)sender).Columns = (int)(Container.ActualWidth / 250);
        ((UniformGrid)sender).Rows = (int)(Container.ActualHeight / 75);
    }

    private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        // Adjust number of columns/rows whenevner the window is resized.
        if (itemsGrid != null)
        {
            itemsGrid.Columns = (int)(Container.ActualWidth / 250);
            itemsGrid.Rows = (int)(Container.ActualHeight / 75);
        }
    }
}

Это, безусловно, может быть немного исправлено, но, похоже, это делает работу. Возможно, есть более элегантные решения, но я не смог найти ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...