WPF Использование стилей для изменения WrapPannel ListBox на StackPanel ListBox - PullRequest
0 голосов
/ 12 мая 2011

Я хочу изменить представление списка с оберточной панелью внутри на listivew со стековой панелью внутри, в основном для переключения между «представлением маленького изображения» и «представлением сведений».
Не уверен, что лучший способ сделать это, хотя. Что у меня так далеко:

<UserControl.Resources>
    <Style x:Key="ListBoxWrap" TargetType="ListBox">
        <Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate>
                    <WrapPanel />
                </ItemsPanelTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="ListBoxList" TargetType="ListBox">
        <Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate>
                    <StackPanel />
                </ItemsPanelTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>
        <ListBox Style="{StaticResource ListBoxList}" Name="lstContacts" Background="White" Margin="7,0,7,7" Grid.Row="1" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border CornerRadius="4" Margin="5">
                        <StackPanel>
                            <TextBlock Text="{Binding FullName}" Margin="5,3,5,0" />
                            <TextBlock Text="{Binding Title}" Margin="5,0,5,3" />
                        </StackPanel>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Вы также можете использовать ItemTemplateSelector для изменения шаблона на основе конкретного изменения значения, которое может быть (событие) вызвано событием мыши или щелчка.

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

1 голос
/ 12 мая 2011

Вы должны использовать ListView для этого, тогда вам просто нужно поменять ListView.View, чтобы изменить внешний вид, GridView уже является подробным представлением, тогда вам нужно только создать представление для миниатюр.

Для этого подкласс ViewBase, есть пример в документации;создание простого эскиза не должно быть очень трудным.

Этот подход имеет то преимущество, что он полностью инкапсулирует логику отображения, поэтому вам не нужно менять свойства, такие как ItemTemplate, в дополнение к панели.

...