Единая сетка внутри ListBox

Я занимаюсь разработкой программы, для которой требуется собственный файловый менеджер / проводник. Это довольно типично: у меня есть пользовательский элемент управления (с именем FileItem), который включает изображение (эскиз) и метку (имя файла).

Проблема, с которой я столкнулся, связана с макетом; Мне он нужен в макете сетки (поэтому я использую Uniform Grid, который его прибивает), точно так же, как Windows Explorer, когда вы находитесь в режиме просмотра значков:

Проводник Windows

Мне также нужно иметь возможность выбрать файл или несколько файлов и т. Д., Что ListBox отлично справляется. Проблема в том, что я не могу использовать оба.

Итак, я попытался вставить Uniform Grid в ListBox. Макет был отличным, но я не мог выбрать файлы (как будто ListBox там не было).

Быстрый поиск в Google предложил просто использовать ListView, но он не работает хорошо, поскольку имеет фиксированные столбцы и строки (а в программе, над которой я работаю, размер изменится).

Итак, как я могу точно достичь обеих функций ListBox и Uniform Grid?

Изменить (важно): если вам тоже нужен этот вид и вы хотите получить ответ, я действительно рекомендую WrapPanel, а не Uniform Grid. Это автоматически позволит вам динамически изменять количество строк в соответствии с содержимым.


person MasterMastic    schedule 14.10.2012    source источник


Ответы (1)


Чтобы установить ItemsPanel для ListBox в UniformGrid, вы можете сделать это:

<ListBox>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid IsItemsHost="True" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBoxItem Content="Grid Item 1" />
    <ListBoxItem Content="Grid Item 2" />
    <ListBoxItem Content="Grid Item 3" />
    <ListBoxItem Content="Grid Item 4" />
    <ListBoxItem Content="Grid Item 5" />
    <ListBoxItem Content="Grid Item 6" />
    <ListBoxItem Content="Grid Item 7" />
    <ListBoxItem Content="Grid Item 8" />
    <ListBoxItem Content="Grid Item 9" />
    <ListBoxItem Content="Grid Item 10" />
</ListBox>

У вас не должно возникнуть проблем с выбором, и элементы будут отображаться так, как вы хотели.

person Simon Brydon    schedule 14.10.2012