我想将内部带有包装面板的列表视图更改为内部带有堆栈面板的列表视图,基本上是在"小图像视图"和"详细信息视图"之间切换。
不确定最好的方法。到目前为止,我拥有的:
<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>
为此使用ListView
,然后您只需要换出ListView.View
即可更改外观,GridView
已经是详细信息视图,然后您只需要为缩略图创建一个视图。
要做到这一点,子类ViewBase
,文档中有一个示例;创建一个简单的缩略图视图应该不是很困难。
这种方法的优点是它完全封装了显示逻辑,因此除了面板之外,您不需要交换ItemTemplate
等属性。
您还可以使用 ItemTemplateSelector 根据特定的值更改修改模板,该更改可能由鼠标悬停或单击事件触发(事件)。
所有这些代码都将驻留在 xaml 中,您无需创建单独的类或自定义控件。