Treeview节点格式

时间:2013-12-02 13:58:40

标签: c# wpf c#-4.0 .net-4.0 treeview

我正在尝试使树视图尽可能多地看起来像

My computer win 7 pro

我怀疑这是一个树视图,因为驱动器在一种包装面板中,我不能在正常的树视图中实现这一点。

我的最终目标是让它看起来像这样:

enter image description here

现在我们使用的控件已经是HierarchicalDataTemplate的树视图 但最后一个级别是一个在其自己的模板中重复的集合,因此每个项目有1个节点。我cna删除它没有问题,我知道HierarchicalDataTemplate这是包含这些项目的最后一项,所以我决定简单地添加一个包装面板,并在其中添加了一个itemscontrol迭代在子集合中,它工作但是HierarchicalDataTemplate认为是我所谓的节点“标题行”。而不是在下面。这里简要介绍了我的意思。

enter image description here

节点+/-最终位于项目的中间,但问题是那里有数百个项目,滚动不喜欢这样。此外,当我点击节点时,它会突出显示所有内容,然后它会拧紧右侧的滚动条。我把红色虚线放在项目中,选择它认为的项目。

所以我试图在win7中复制“我的电脑”,但是使用子级别而没有节点问题。每个项目都必须单独点击,因为它们是拖放的,它们是我们产品的一部分,并且是在同一窗口内推入CAD引擎窗口的三维模型。

我是否还能完成对任务的良好控制?

  • 编辑* excel 2010中的另一个示例尝试打开剪贴画菜单,出现一个工具栏。所有物品都在一个包裹板中。我想要那个但是有小组/小组。

  • 编辑2 * 任何人都可能知道自定义控件或Microsoft用来制作资源管理器的控件吗?

1 个答案:

答案 0 :(得分:1)

了解如何轻松复制。 需要下面的2模板

    <DataTemplate DataType="{x:Type local:C3DGalleryFolder}">
        <StackPanel>
            <Expander Header="{Binding Name}" FontWeight="DemiBold" Background="White">
                <ItemsControl Margin="20,0,0,0" ItemsSource="{Binding ListItem, Converter={StaticResource GallerySort}}"/>
            </Expander>
        </StackPanel>
    </DataTemplate>

    <DataTemplate DataType="{x:Type local:C3DGalleryItems}">
        <ItemsControl Margin="15,0,0,0" Name="ItemListing" ItemsSource="{Binding Path=ListItem, Converter={StaticResource GallerySort}}" >
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Horizontal" Background="White"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="3" Background="White" HorizontalAlignment="Center" VerticalAlignment="Center" >
                        <Border Background="White" Height="190" Width="120" Margin="1" BorderThickness="1" BorderBrush="DarkBlue" CornerRadius="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                            <Grid Background="White" Margin="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="118"/>
                                    <RowDefinition Height="*"/>
                                </Grid.RowDefinitions>
                                <Polygon Points="-1,-1 20,-1 -1,20" Stroke="Black" Fill="DarkBlue" Panel.ZIndex="1000000" />
                                <Image Grid.Row="0" Source="{Binding ImagePath}" Stretch="Uniform" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="5,5,5,5" RenderOptions.BitmapScalingMode="HighQuality" SnapsToDevicePixels="True"></Image>
                                <TextBlock Grid.Row="1" TextWrapping="Wrap" FontWeight="Regular" Foreground="DarkBlue" Text="{Binding Name}" Width="110" TextAlignment="Center" VerticalAlignment="Center" />
                            </Grid>
                        </Border>
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </DataTemplate>

还需要一个简单的项目控件

<ItemsControl Margin="10,0,0,0" Name="lst3dgallery" ItemsSource="{Binding List3DGallery, Converter={StaticResource GallerySort}}" />

那么模型非常简单,您可以创建项目集合添加文件夹,并在其中添加包含项目本身的项目集合

[Serializable()]
public class C3DGallery
{
    public string Name { get; set; }
    public ObservableCollection<C3DGallery> ListItem { get; set; }
    public C3DGallery()
    {
        Name = "";
        ListItem = new ObservableCollection<C3DGallery>();
    }
}

[Serializable()]
public class C3DGalleryFolder : C3DGallery
{
    public C3DGalleryFolder(string sName)
    {
        Name = sName;
        ListItem = new ObservableCollection<C3DGallery>();
    }
}

[Serializable()]
public class C3DGalleryItems : C3DGallery
{
    public C3DGalleryItems()
    {
        Name = "";
        ListItem = new ObservableCollection<C3DGallery>();
    }
}

[Serializable()]
public class C3DGalleryItem : C3DGallery
{
    public string ImagePath { get; set; }
    public object Item { get; set; }

    public C3DGalleryItem(object oItem, string sName, string sImagePath)
    {
        Name = sName;
        ImagePath = "";
        Item = oItem;
        if (File.Exists(sImagePath)) { ImagePath = sImagePath; }
    }
}