对于我正在编写的应用程序,我需要一个多柱状的Treeview,我想知道是否有人知道免费工作(在Vs-2010中)多列圆形Treeview.
我有一个TreeView使用a HierarchicalDataTemplate绑定其数据.
它看起来像这样:
<TreeView x:Name="mainTreeList" ItemsSource="{Binding MyCollection}>
<TreeView.Resources>
<HierarchicalDataTemplate
DataType="{x:Type local:MyTreeViewItemViewModel}"
ItemsSource="{Binding Children}">
<!-- code code code -->
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
现在,从主窗口的代码隐藏,我想得到当前选择TreeViewItem.但是,如果我使用:
this.mainTreeList.SelectedItem;
Run Code Online (Sandbox Code Playgroud)
selectedItem属于类型MyTreeViewItemViewModel.但我想得到'父母'或'约束' TreeViewItem.我没有把它传递给我的TreeViewItemModel对象(甚至不知道如何).
我怎样才能做到这一点?
这不可能是这么困难.WPF中的TreeView不允许您设置SelectedItem,表示该属性是ReadOnly.我有TreeView填充,甚至在数据绑定集合更改时更新.
我只需要知道选择了什么项目.我正在使用MVVM,因此没有代码隐藏或变量来引用树视图.这是我找到的唯一解决方案,但它是一个明显的黑客,它在XAML中创建了另一个元素,它使用ElementName绑定将自己设置为树视图选定项,然后您必须绑定Viewmodel.关于此问题还有其他几个问题,但没有给出其他有效的解决方案.
我已经看到了这个问题,但是使用给出的答案给出了编译错误,由于某种原因,我无法将混合sdk System.Windows.Interactivity的引用添加到我的项目中.它说"未知的错误系统.窗口没有被预加载",我还没有想出如何通过它.
对于奖励积分:为什么微软会让这个元素的SelectedItem属性ReadOnly?
我是新的节点在这里.. :)我想出了这个算法,但它只显示父节点的列表..像这样..
a
a.txt
b
c
c
m
n
b
o
p
etc...
Run Code Online (Sandbox Code Playgroud)
我希望下一个节点将被放入上一个节点内的一个节点..所以它会像这样出现..
a
a.txt
b
o
p
c
m
n
etc...
Run Code Online (Sandbox Code Playgroud)
我有一些想法,但我可以实现它代码.. :)任何帮助请..
private void ListDirectory(TreeView treeView, String path)
{
Stack<string> stack = new Stack<string>();
TreeNode DirFilesCollection = new TreeNode();
stack.Push(path);
while (stack.Count > 0)
{
string dir = stack.Pop();
try
{
List<String> parentDir = new List<string>();
parentDir.AddRange(Directory.GetFiles(dir, "*.*"));
parentDir.AddRange(Directory.GetDirectories(dir));
DirectoryInfo d = new DirectoryInfo(dir);
TreeNode TParent = new TreeNode(d.Name);
foreach (String s in parentDir)
{
FileInfo f …Run Code Online (Sandbox Code Playgroud) 我有一个三级树视图.如何从代码中选择第三级中的任何项目?我尝试了许多博客和stackoverflow中提到的方法,但它似乎只适用于第一级(对于第一级以下的项目,dbObject为null).
这是我用来选择TreeViewItem的代码.我错过了什么吗?
public static void SetSelectedItem(this TreeView control, object item)
{
try
{
var dObject = control.ItemContainerGenerator.ContainerFromItem(item);
//uncomment the following line if UI updates are unnecessary
((TreeViewItem)dObject).IsSelected = true;
MethodInfo selectMethod = typeof(TreeViewItem).GetMethod("Select",
BindingFlags.NonPublic | BindingFlags.Instance);
selectMethod.Invoke(dObject, new object[] { true });
}
catch { }
}
Run Code Online (Sandbox Code Playgroud) 
在.NET中使用TreeView组件时,我会看到左侧树的外观.如何为我的.NET TreeView获取正确树(Windows Native Look)的外观?
我特别想要的是"三角形"节点手柄和蓝色"气泡"选择方块.
Gretings.
我正在创建一个界面来编辑游戏场景.基本上它由具有嵌套条件和动作的事件组成.因此,我计划使用两个树视图 - 一个用于选择事件,另一个用于选择要编辑的事件内的条件/操作.
现在,您看,如果我选择一个事件(在左侧树视图中),然后尝试在右侧树视图中选择一些内容,左侧树视图将停止显示蓝色选择矩形.这显然是不好的,因为现在用户不知道他正在编辑哪个事件!
我发现保留某些关于当前选择的信息的唯一方法是使用SelectedImageIndex,但这只是一个不同的小图像.
有没有其他方法可以突出显示treenode,而没有关注树视图?我知道我可以只使用Graphics.DrawRectangle或者其他东西,但是我听说绘图应该在Paint事件中完成而treeview没有绘制事件...所以我想如果我在失去焦点的情况下绘制它,然后拖动窗体出于屏幕或其他什么,它将被"删除"?
无论如何,请告诉我你是否有想法(除了使用一个单独的图标选择和未选择treenode)
谢谢!
关于我之前发布的问题(WPF:正确地将对象存储在TreeViewItem中)
是否可以HierarchicalDataTemplate在TreeView中嵌套?
请看以下示例:
码:
public class Artist
{
private readonly ICollection<Album> _children = new ObservableCollection<Album>();
public string Name { get; set; }
public ICollection<Album> Albums
{
get { return _children;}
}
}
public class Album
{
private readonly ICollection<Track> _children = new ObservableCollection<Track>();
public string Name { get; set; }
public ICollection<Track> Tracks
{
get { return _children;}
}
}
Run Code Online (Sandbox Code Playgroud)
XAML:
<TreeView x:Name="_treeView">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Artist}" ItemsSource="{Binding Albums}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
如您所见,TreeView仅绑定艺术家及其专辑.如何修改它以包括专辑的曲目(作为专辑的子列表,即)?
用于treeview.SelectedNode选择子节点.如何以treeview.AfterSelect编程方式选择节点时调用事件?
this.treeView1.SelectedNode = this.treeView1.Nodes[0].Nodes[0].Nodes[0].Nodes[0];
if (this.treeView1.Nodes[0].Nodes[0].Nodes[0].Nodes[0].IsSelected)
{
MessageBox.Show("Node is selected");
}
Run Code Online (Sandbox Code Playgroud)