有没有办法在虚拟化TreeView中手动选择节点然后将其带入视图?
我在TreeView中使用的数据模型是基于VM-MV模型实现的.每个TreeViewItem的IsSelected属性绑定到ViewModel中的对应属性.我还为TreeView的ItemSelected事件创建了一个监听器,我为所选的TreeViewItem调用了BringIntoView().
这种方法的问题似乎是在创建实际的TreeViewItem之前不会引发ItemSelected事件.因此,启用虚拟化后,节点选择将无法执行任何操作,直到TreeView足够滚动,然后在最终引发事件时"神奇地"跳转到所选节点.
我真的很喜欢使用虚拟化,因为我的树中有数千个节点,并且在启用虚拟化时我已经看到了相当令人印象深刻的性能改进.
如何禁用特定节点,以便用户无法选择它.为用户隐藏它也是有效的.
我尝试了Visible属性,但隐藏了整个树(所有节点).我只想要一些节点被禁用/隐藏.
C#使用Visual Studio 2005 TreeNode编辑器.
我使用本教程在JavaFX 2中创建了自己的TreeView .但是我想隐藏我的根节点.
它现在看起来如何:
应该如何看待:
谢谢,Muki
我正在尝试将一个TreeView放在WPF中的ComboBox中,这样当组合框被删除时,用户就会获得一个分层列表而不是一个平面列表,而他们选择的任何节点都会成为ComboBox的选定值.
我已经搜索了很多关于如何实现这个目标但是我能找到的最好的只是潜在的解决方案,因为我对WPF来说是荒谬的,我无法工作.
我对WPF和数据绑定有足够的了解,我可以将我的数据放到树视图中,甚至可以在组合框中获取树视图,但是我能够完成的任何操作都不正常.我附上了截图来说明我的意思.在屏幕截图中,组合框是"打开"的,因此底部的树视图是我可以选择节点的地方,树形视图"在顶部"正在组合框顶部绘制,我想要所选节点的文本/值在要显示的树中.
基本上我不知道怎么做的是如何让treeview的currrently选择节点将其值返回到组合框,然后组合框将其用作选定值?
这是我目前使用的xaml代码:
<ComboBox Grid.Row="0" Grid.Column="1" VerticalAlignment="Top">
<ComboBoxItem>
<TreeView ItemsSource="{Binding Children}" x:Name="TheTree">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type Core:LookupGroupItem}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Path=Display}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</ComboBoxItem>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
截图:
在WPF中,当我右键单击树视图项时,我希望在显示上下文菜单之前选择/激活它.
这听起来很简单,但是包含hierachicalDataTemplate会使事情变得复杂.
我有以下树视图:
<TreeView
x:Name="trv"
ContextMenu="{StaticResource contextMenu}"
ItemTemplate="{StaticResource treeHierarchicalDataTemplate}"
ItemsSource="{Binding Source={StaticResource meetingItems}}" >
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="TreeViewItem.PreviewMouseRightButtonDown" Handler="trv_PreviewMouseRightButtonDown"/>
<Setter Property="IsExpanded" Value="True"></Setter>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
这是我的事件处理程序......
private void trv_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
TreeViewItem item = sender as TreeViewItem;
if (item != null)
{
item.Focus();
e.Handled = true;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意我如何添加上面的EventSetter.这个ALMOST有效.但它只选择根级树视图节点(即我右键单击的节点的根父节点).这可能是因为我的分层数据模板?此模板可以包含相同类型的子项.
这是我的分层数据模板......
<HierarchicalDataTemplate x:Key="treeHierarchicalDataTemplate"
ItemsSource="{Binding Path=ChildMeetingItems}">
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=Red}" Value="True">
<Setter TargetName="img" Property="Image.Source" Value="pack://siteoforigin:,,,/images/bookRed.png"></Setter>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
<StackPanel
x:Name="treeViewItemPanel"
Background="Transparent"
Orientation="Horizontal">
<Image Width="16" Height="16" x:Name="img" Margin="0,0,4,0" Source="pack://siteoforigin:,,,/images/bookGreen.png"></Image>
<TextBlock Foreground="DarkGray" …Run Code Online (Sandbox Code Playgroud) 我正在尝试拖放我的树视图中的文件,但我不知道为什么它会崩溃,如果我运行它并尝试拖动文件.
下面的代码是我尝试过的.请帮忙.
private void TreeViewItem_Drop( object sender, DragEventArgs e)
{
TreeViewItem treeViewItem = e.Source as TreeViewItem;
TreeViewItem obj = e.Data.GetData(typeof(TreeViewItem)) as TreeViewItem;
if ((obj.Parent as TreeViewItem) != null)
{
(obj.Parent as TreeViewItem).Items.Remove(obj);
}
else
{
treeViewItem.Items.Remove(obj);
treeViewItem.Items.Insert(0, obj);
e.Handled = true;
}
}
private void TreeViewItem_MouseLeftButtonDown( object sender,MouseButtonEventArgs e)
{
DependencyObject dependencyObject = _treeview.InputHitTest(e.GetPosition(_treeview)) as DependencyObject;
Debug.Write(e.Source.GetType().ToString());
if (dependencyObject is TextBlock)
{
TreeViewItem treeviewItem = e.Source as TreeViewItem;
DragDrop.DoDragDrop(_treeview, _treeview.SelectedValue, DragDropEffects.Move);
e.Handled = true;
}
}
Run Code Online (Sandbox Code Playgroud) 我只是想找到一种方法来控制TreeView节点通过它们绑定的对象的扩展/折叠.该对象具有一个IsExpanded属性,我想使用它来显示TreeView基于该属性展开或折叠的节点本身.
这是我的代码:
C#:
public partial class Window2 : Window
{
public Window2()
{
InitializeComponent();
this.DataContext = new List<Parent>() { Base.GetParent("Parent 1"), Base.GetParent("Parent 2") };
}
}
public class Base
{
public string Name { get; set; }
public bool IsExpanded { get; set; }
public static Parent GetParent(string name)
{
Parent p = new Parent() { Name = name };
p.Children.Add(new Child() { Name = "Child 1", GrandChildren = new ObservableCollection<GrandChild>() { new GrandChild() …Run Code Online (Sandbox Code Playgroud) 在树视图中上下移动节点的最准确方法是什么.我在每个节点上都有一个上下文菜单,所选节点应该随其所有子节点一起移动.
我正在使用C#.Net 3.5 WinForms
我有一个带有复选框的树视图,我试图在复选框中完成此操作时禁用双击.
我找到了完全禁用双击的方法,但这不是我想要的.
如果你能帮助我,我感激不尽.
我正在为我的Web应用程序创建具有HTML5要求的Family Tree功能.我已经搜索并找到了一些JS样本,但我找不到符合我要求的样本.我已经尝试过JIT,Rafael,GoJS等.
我发现这是距离GoJS最近的一个:
但这还不够.我需要使用拖放功能将一个成员与另一个成员连接起来.
是否有一些JS可能符合要求或至少像GoJS一样运作?由于我需要为GoJS支付许可证,然后定制它,预算紧张.非常感谢你.
treeview ×10
wpf ×5
c# ×4
winforms ×2
.net ×1
collapse ×1
combobox ×1
data-binding ×1
expand ×1
family-tree ×1
hide ×1
html5 ×1
html5-canvas ×1
java ×1
javafx-2 ×1
javascript ×1
mvvm ×1
treeviewitem ×1
visibility ×1