如何在Windows资源管理器中实现类似于“我的电脑”视图的GUI?
特别是“图标”视图模式。包括不同项目类型的分组(作为存储在此计算机/硬盘驱动器上的文件/带有可移动存储组的设备在Windows资源管理器中)
在WinForms中我会使用ListView这个东西,但在WPF中,唯一能够接近的是带有自定义ControlTemplate的列表框,但似乎太费劲了!
答案 0 :(得分:2)
为FileSystem类定义了HeirarchichalDataTemplate的TreeView
答案 1 :(得分:1)
这是很多打字(约50行)但是当你完成基本功能时,你可以轻松地做一些事情,比如更改项目显示或为组添加展开/折叠功能,这里有一个例子(展开/折叠,只是为了好玩):
首先是我们的数据对象:
public class Item
{
public string Type { get; set; }
public string Name { get; set; }
public ImageSource Icon { get; set; }
}
在您的代码中创建它们并将它们的列表设置为以下窗口的DataContext:
<Window x:Class="ListViewTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Name="W">
<Window.Resources>
<CollectionViewSource x:Key="Items" Source="{Binding}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Type"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
<DataTemplate x:Key="ItemTemplate">
<Grid Width="128">
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
<RowDefinition Height="12"/>
</Grid.RowDefinitions>
<Image Source="{Binding Icon}"/>
<TextBlock Text="{Binding Name}" Grid.Row="1"/>
</Grid>
</DataTemplate>
<ItemsPanelTemplate x:Key="ItemPanel">
<WrapPanel Orientation="Horizontal" Width="{Binding ElementName=W, Path=ActualWidth}"/>
</ItemsPanelTemplate>
<DataTemplate x:Key="HeaderTemplate">
<StackPanel Margin="0 15">
<TextBlock Text="{Binding Name}"/>
<Rectangle Height="1" Fill="Blue"/>
</StackPanel>
</DataTemplate>
<Style x:Key="ContainerStyle" TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander Header="{Binding Name}" IsExpanded="True">
<ItemsPresenter/>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<ListBox
ItemsSource="{Binding Source={StaticResource Items}}"
ItemTemplate="{StaticResource ItemTemplate}"
ItemsPanel="{StaticResource ItemPanel}">
<ListBox.GroupStyle>
<GroupStyle
HeaderTemplate="{StaticResource HeaderTemplate}"
ContainerStyle="{StaticResource ContainerStyle}"/>
</ListBox.GroupStyle>
</ListBox>
</Grid>
</Window>
可能存在一些漏洞,但这是一个良好的开端。
答案 2 :(得分:0)
它支持分组和图标模式(在许多其他事情中)。
答案 3 :(得分:0)