TreeView使用
整理一下对TreeView的使用:
1.TreeView是作为一个容器控件,一般会在其内放入TreeViewItem控件,当然也可以放入Button等控件。
2.当需要在某些层展开,后面的收起时,需要配合TreeViewItem的Header和ItemsSource来使用。前面展开的部分都使用Header赋内容,后面收起的则使用ItemsSource统一赋值。不恰当的比喻是类似于if,elseif,elseif,…,else。故ItemsSource只在结束时使用一次。另外需要提醒的是,Header赋值为个体,ItemsSource赋值为集合。
3.可维护性好的使用方式是,通过数据模板来定义数据的显示,这有点像给对象穿衣服。为每个类的对象定义不同的界面显示,即使后期需要修改,这个逻辑也是流畅的,清晰的。
4.将ViewModel对象赋值给View的数据上下文,这时只需给Header和ItemsSource定义绑定的类型,系统会自动找到上下文的匹配类型对象(ViewModel对界面公开的属性)进行内容绑定,然后再以数据模板的方式显示出来。
<HierarchicalDataTemplate DataType="{x:Type local:CenterModel}" >
<StackPanel Orientation="Horizontal">
<Image VerticalAlignment="Center" Source="{Binding Icon}" Width="16" Height="16" Margin="0,0,2,2"></Image>
<TextBlock VerticalAlignment="Center" Text="{Binding DisplayName}"></TextBlock>
<StackPanel.ToolTip>
<TextBlock VerticalAlignment="Center" Text="{Binding Name}" TextWrapping="Wrap" MaxWidth="200" ></TextBlock>
</StackPanel.ToolTip>
</StackPanel>
</HierarchicalDataTemplate>
<TreeView Name="CenterTree" Margin="5" TreeViewItem.Selected="StationTree_Selected" Grid.Column="0">
<TreeViewItem IsExpanded="True" Header="{Binding Center}" ItemsSource="{Binding Stations}">
</TreeViewItem>
</TreeView>
------------------------------------------------
使TreeView随时保持展开的方法:
<Style x:Key="TV_AllExpanded" TargetType="{x:Type TreeView}">
<Style.Resources>
<Style TargetType="TreeViewItem">
<Style.Triggers>
<Trigger Property="HasItems" Value="True" >
<Setter Property="IsExpanded" Value="True"/>
</Trigger>
</Style.Triggers>
</Style>
</Style.Resources>
</Style>
然后在代码中设置:
CenterTree.Style = (Style)this.FindResource("TV_AllExpanded");