如何捕获单击TreeView的Selected节点的事件?它不会触发SelectedNodeChanged,因为选择显然没有改变但是我可以捕获什么事件所以我知道单击了所选节点?
更新:当我有一些时间,我将不得不深入了解TreeView控件的内容并挖掘它处理click事件的内容和位置,并将TreeView子类化以暴露新事件OnSelectedNodeClicked.
我可能会在圣诞节假期这样做,我会报告结果.
更新:我已经在TreeView控件的子类下面提出了一个解决方案.
我可能会遇到星期一的愚蠢,但是在我将它们添加到后面的代码中后,我找不到扩展所有树视图节点的好方法(比如treeView.ExpandAll()).
有什么快速帮助?
我们试图提出一种虚拟化的好方法TreeView,数据并不是真正的问题,因为它非常轻(每个项目大约16个字节),问题是我们可能有数万个,尽管实际上数据只需要160 kb的内存,treeview项目确实使用了更多的内存.我们现在尝试使用3种不同的树进行虚拟化,WPF,Infragistics和Telerik.所有这些都有很大的问题,使它们无法用于我们的应用程序:
WPFTreeView:滚动条显示了一些怪异的行为,周围很多跳跃,变化大小不一致,用鼠标拖动它不能正常工作,滚动(跳来回)
Telerik:项目消失,滚动条也不稳定,项目随机展开崩溃,样式不起作用
Infragistics:项目根本没有虚拟化,每个项目都留在内存中,使虚拟化无用.
我们几个月来一直在努力解决这个问题,但我们还没有找到一个好的解决方案.有没有人成功实现TreeView了超过9000项的虚拟化?如果是这样,你的策略是什么?你使用了第三方控件吗?它100%有效吗?
任何建议都非常感谢.
谢谢.
我有一个像这样的节点的树视图:"Foo(1234)",并希望允许用户重命名节点,但只允许Foo部分,没有(1234).我首先尝试更改节点文本,BeforeLabelEdit如下所示:
private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
{
    e.Node.Text = "Foo";
}
但是当我单击节点进行编辑时,文本框中会出现"Foo(1234)".
好的,那就让我们试试别的吧.
我设置treeView1.LabelEdit为false,然后执行以下操作:
private void treeView1_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        if (treeView1.SelectedNode == treeView1.GetNodeAt(e.Location))
        {
            treeView1.SelectedNode.Text = "Foo";
            treeView1.LabelEdit = true;
            treeView1.SelectedNode.BeginEdit();
        }
    }
}
然后AfterLabelEdit,我LabelEdit回到了假.
你猜怎么着?这也不起作用.它将节点文本更改为"Foo",但不显示编辑文本框.
有任何想法吗?谢谢
我有一个带有Treeview控件的WPF应用程序.
当用户单击树上的节点时,页面上的其他TextBox,ComboBox等控件将填充适当的值.
然后,用户可以更改这些值,并通过单击"保存"按钮保存其更改.
但是,如果用户选择不同的Treeview节点而不保存其更改,我想显示警告并取消该选择的机会.
MessageBox:继续并放弃未保存的更改?确定/取消http://img522.imageshack.us/img522/2897/discardsj3.gif
XAML ...
<TreeView Name="TreeViewThings"
    ...
    TreeViewItem.Unselected="TreeViewThings_Unselected"
    TreeViewItem.Selected="TreeViewThings_Selected" >
Visual Basic ......
Sub TreeViewThings_Unselected(ByVal sender As System.Object, _
                              ByVal e As System.Windows.RoutedEventArgs)
    Dim OldThing As Thing = DirectCast(e.OriginalSource.DataContext, Thing)
    If CancelDueToUnsavedChanges(OldThing) Then
        'put canceling code here
    End If
End Sub
Sub TreeViewThings_Selected(ByVal sender As System.Object, _
                            ByVal e As System.Windows.RoutedEventArgs)
    Dim NewThing As Thing = DirectCast(e.OriginalSource.DataContext, Thing)
    PopulateControlsFromThing(NewThing)
End Sub
如何取消这些取消选择/选择事件?
更新:我问过一个后续问题...... 
如何使用MessageBox确认正确处理PreviewMouseDown事件?
在TreeNode拖放操作正在进行的同时,.Net 2.0中是否有任何内置函数可以扩展?
我在Visual Studio 2005中使用C#.
我已经Treeview使用多级多线树(想想组织结构图或文件/文件夹对话框)填充了一个控件,我想使用拖放来移动树中的节点.
拖放代码运行良好,我可以放到任何可见节点上,但我希望我的控件在Windows资源管理器窗格上拖动文件时的行为就像Windows资源管理器一样.具体来说,我希望每个文件夹打开,如果徘徊1/2秒左右.
我已经开始使用Threading和一种Sleep方法开发一个解决方案,但我遇到了问题,并且想知道是否已经存在某些问题,如果不是,我会指责并学习如何使用线程(这是关于时间的,但我希望快速获取此应用程序)
我是否需要编写自己的代码来处理TreeNode在拖放模式下盘旋时的扩展?
我有一组Database对象,每个对象都包含Schema对象和User对象的集合.我想将它们绑定到TreeView,但在层次结构中添加其他静态级别,以便生成的TreeView看起来或多或少像这样:
<TreeView>
    <TreeViewItem Header="All the databases:">
        <TreeViewItem Header="Db1">
            <TreeViewItem Header="Here's all the schemas:">
                <TreeViewItem Header="Schema1"/>
                <TreeViewItem Header="Schema2"/>
            </TreeViewItem>
            <TreeViewItem Header="Here's all the users:">
                <TreeViewItem Header="User1"/>
                <TreeViewItem Header="User2"/>
            </TreeViewItem>
        </TreeViewItem>
        <TreeViewItem Header="Db2">
            <TreeViewItem Header="Here's all the schemas:">
                <TreeViewItem Header="Schema1"/>
                <TreeViewItem Header="Schema2"/>
            </TreeViewItem>
            <TreeViewItem Header="Here's all the users:">
                <TreeViewItem Header="User1"/>
                <TreeViewItem Header="User2"/>
            </TreeViewItem>
        </TreeViewItem>
    </TreeViewItem>
</TreeView>
通过使用以下模板,我能够非常接近我想要的东西:
<Window.Resources>
    <HierarchicalDataTemplate DataType="{x:Type smo:Database}">
        <TreeViewItem Header="{Binding Path=Name}">
            <TreeViewItem Header="Here's all the schemas:" ItemsSource="{Binding Path=Schemas}"/>
            <TreeViewItem Header="Here's all the users:" …在我TreeView,我有MouseDown/ MouseUp等等的不同事件,但当我做得足够快时,TreeView扩展/折叠TreeNode.我不想要这种烘焙行为.
有没有办法禁用它?
我在asp.net mvc3中使用jsTree和contextmenu创建了一个树视图.
<div id="divtree">
<ul id="tree">
    <li><a href="#" class="usr">@Model.Name</a>
        @Html.Partial("Childrens", Model)
    </li>
</ul>
<script type="text/javascript">
$(function () {
    $("#divtree").jstree(
        {
            "plugins": ["themes", "html_data", "ui", "crrm", "contextmenu"]
        });
});
它的工作正常.

我想在上下文菜单中创建一个客户项目.例如,创建一个新的菜单项.新的创建在上下文菜单中的新员工.并将员工插入DB.我使用jQuery POST函数来完成这项任务.但是如何处理中的click事件
上下文菜单项.
请帮忙
我有一个树视图,显示成员可能有重复,标签不会.例:
TreeNode node = new TreeNode(itemName);
node.Tag = itemID; //unique ID for the item
treeView1.Nodes.Add(node);
因此,在搜索时,我知道我可以使用itemName搜索
treeView1.Nodes.Find(itemName, true);
但是我怎么能通过标签搜索呢?treeView1.Nodes.Where没有定义,所以对我来说没有linq :(
有关如何按标签搜索的任何建议?:) 谢谢!
treeview ×10
c# ×5
wpf ×5
.net ×2
winforms ×2
asp.net ×1
asp.net-mvc ×1
data-binding ×1
expand ×1
hover ×1
jstree ×1
savechanges ×1
search ×1