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
补充:.NET技术 , 组件/控件开发