WPF中用HierarchicalDataTemplate作为TreeView节点

xia623330606 2014-05-28 07:41:47
最近在用WPF做东西,遇到个问题困了我好久都搞不定,只好来求大神赐教,用HierarchicalDataTemplate作为显示TreeView节点的模板,程序可以正常运行,我现在想实现的功能是:当选中一个TreeView节点,点击“添加”后,在所选节点的最后一个子节点之后添加一个TextBox,用来添加一个新的节点。这个功能类似于windows资源管理器中新建文件夹,这个功能在winform中只用new TreeViewItem(),然后调用TreeViewItem的Add()方法,把TextBox添加进TreeViewItem就行了,可是我现在是用HierarchicalDataTemplate作为TreeView节点的模板,这样的话,这个功能该如何实现???

windows资源管理器中的新建文件夹截图:


我的程序运行截图:


XAML代码如下:

<Window x:Class="WebSiteFavorite.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WebSiteFavorite"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" WindowStartupLocation="CenterScreen" Height="600" Width="800" Loaded="Window_Loaded">
<Window.Resources>
<HierarchicalDataTemplate x:Key="TreeViewTemplate" DataType="{x:Type local:PropertyNodeItem}" ItemsSource="{Binding

Children}">
<StackPanel>
<Image/>
<TextBlock Text="{Binding DisplayName}"/>
<StackPanel.ToolTip>
<TextBlock Text="{Binding FileSystemInfo.FullName}"/>
</StackPanel.ToolTip>
</StackPanel>
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="50"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition MinWidth="100"/>
</Grid.ColumnDefinitions>
<DockPanel>
<TreeView Name="tvFavorite" TreeViewItem.Selected="tvFavorite_Selected" ItemTemplate="{StaticResource

TreeViewTemplate}" FontSize="15">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="False"/>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ContextMenu>
<ContextMenu>
<MenuItem Name="tvcmAdd" Header="添加" Click="tvcmAdd_Click"/>
<MenuItem Name="tvcmDelete" Header="删除"/>
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
</DockPanel>
<GridSplitter Grid.Column="1" HorizontalAlignment="Center" Width="5" Background="#BBB"/>
</Grid>
</Grid>
</Window>


实体类PropertyNodeItem代码如下:

public class PropertyNodeItem
{
string icon = "";

public string Icon
{
get { return icon; }
set
{
icon = value;
}
}

string displayName = "";

public string DisplayName
{
get { return displayName; }
set
{
displayName = value;
}
}

bool isExpanded = false;

public bool IsExpanded
{
get { return isExpanded; }
set { isExpanded = value; }
}

FileSystemInfo fileSystemInfo = null;

public FileSystemInfo FileSystemInfo
{
get { return fileSystemInfo; }
set
{
fileSystemInfo = value;
}
}

private ObservableCollection<PropertyNodeItem> children = new ObservableCollection<PropertyNodeItem>();

public ObservableCollection<PropertyNodeItem> Children
{
get { return children; }
set { children = value; }
}
}
}
...全文
939 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiaoman1 2014-05-29
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
这个 你最好封装一个树结构 类,里边设置节点集合,当前节点,当前节点的perv节点,当前节点的next节点,更具你选择节点 添加它的上或下节点。
silverlight 动态增加文本框如何实现 没分了帖子都发布了。
exception92 2014-05-29
  • 打赏
  • 举报
回复
exception92 2014-05-29
  • 打赏
  • 举报
回复
这个 你最好封装一个树结构 类,里边设置节点集合,当前节点,当前节点的perv节点,当前节点的next节点,更具你选择节点 添加它的上或下节点。

8,731

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧