当前位置:编程学习 > C#/ASP.NET >>

WPF中类似TreeListView控件的实现

在WPF中实现ListView和TreeView结合的效果。
当我点击ListView的一行中的一个按钮时,
这行相应的详细数据以TreeView的方式详细展开,
效果见附件。
有知道源代码的或者知道解决思路的请告诉我,谢谢哟
分不够再加

最初载入的展开前效果


点击一行展开效果


全部展开效果
--------------------编程问答-------------------- 占沙发 --------------------编程问答-------------------- 只能帮顶 --------------------编程问答-------------------- 这个要写出来很有点麻烦,你只能看运气了,看有没有以前做过有现成的代码, --------------------编程问答-------------------- 我只找到一个很类似的,是从TreeView继承改写的,但是还不是偶想要的效果。
看这个样子好像真的很难,请世界高手出现啊  呵呵
--------------------编程问答-------------------- 自定义ITEMTEMPLATE。 
有什么困难的????? --------------------编程问答-------------------- 呵呵,很眼熟。
刚刚写了这样的一个控件  重写一下TreeView和TreeViewItem, 再搞一下DataTemplate和HierarchicalDataTemplate就可以了。

给你写点代码 :
[code=XAML]
 <Style x:Key="TreeViewStyle" TargetType="TreeView">
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Setter Property="Padding" Value="0"/>
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="Margin" Value="0"/>
        <Setter Property="SnapsToDevicePixels" Value="True"/>
        <Setter Property="Width" Value="Auto"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TreeView">
                    <Border SnapsToDevicePixels="True">
                        <ScrollViewer CanContentScroll="False" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Disabled" 
                                      Padding="{TemplateBinding Control.Padding}"  Background="{TemplateBinding Panel.Background}"
                                      SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" Focusable="False">
                            <ItemsPresenter />
                        </ScrollViewer>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
[/code]

[code=XAML]
<Style x:Key="TreeViewItemStyle" BasedOn="{x:Null}" TargetType="{x:Type TreeViewItem}">
        <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded, Mode=OneWay}" />
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Setter Property="SnapsToDevicePixels" Value="True"/>
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate TargetType="TreeViewItem">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <ContentPresenter Content="{TemplateBinding HeaderedContentControl.Header}" Margin="0"
                                          ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}"
                                          ContentTemplateSelector="{TemplateBinding HeaderedContentControl.HeaderTemplateSelector}"
                                          ContentSource="Header" 
                                          Name="PART_Header" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}"/>
                        <ItemsPresenter Name="ItemsHost" Margin="0" Grid.Row="1"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="TreeViewItem.IsExpanded" Value="False">
                            <Setter Property="UIElement.Visibility" TargetName="ItemsHost">
                                <Setter.Value>
                                    <x:Static Member="Visibility.Collapsed" />
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
[/code]

你要做的就是使ContentPresenter 和 ItemsPresenter 使用适当的数据模板,DataType或者DataTemplateSelector。
我是使用M-V-ViewModel做的,DataContext是我自己定义的TreeViewItemViewModel,当然,数据结构由你自己定义。

其实这种控件的制作很简单,你找准思路就可以。WPF要思路活一点,不要一眼看成什么ListView和TreeView的结合体,那样会限制你。
外面是一个ItemsControl, 里面每一个Item是一个HeaderedItemsControl。剩下你选一下WPF哪些控件拿起来用方便,组合捏吧改一改,就可以了。

Hope this helps --------------------编程问答-------------------- 我有前几天也是需要解决这个问题,不过我现在有了一个控件,可以解决这个问题,是一个叫SUPERGRID的控件,你给我邮箱我发给你,当然不要忘记给分哦,分数你看着给 --------------------编程问答-------------------- 我觉得好东西大家应该一起分享,我前段时间也是一直在求购,就是没人给我回,唉,大家不要只有求时才出现嘛 --------------------编程问答-------------------- 能否发一份源码给我?谢谢
maibo@163.com

引用 6 楼 zhouyongh 的回复:
呵呵,很眼熟。
刚刚写了这样的一个控件  重写一下TreeView和TreeViewItem, 再搞一下DataTemplate和HierarchicalDataTemplate就可以了。

给你写点代码 :
XAML code

 <Style x:Key="TreeViewStyle" TargetType="TreeView">
        <Setter Property=……
补充:.NET技术 ,  组件/控件开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,