[修改]我在ExtJs中创建一个TreePanel,它从JSON文件中加载它的子节点.我在向节点添加点击操作时遇到问题.我不确定它是否在创建树的脚本中添加,或者它是否作为JSON中的属性添加,如果是,则语法是什么.任何帮助,将不胜感激!如果可能,请提供一个示例.
我有一个非常扁平结构的树视图,只有两个级别的项目 - 主要项目和一个子项目级别.我正在使用WPF MVVM,并希望以不同的方式设置两个级别的样式,但不知道如何.
我将树视图绑定到我的ViewModel中的ObservableCollection,并且每个元素还有一个ObservableCollection用于下一个级别.
有帮助吗?
我有一个如下所示的树视图
我使用c#进行winform编程
所以你能告诉我如何在这个例子中以编程方式改变第一和第二节点的位置.
我想将添加ToolTip到TreeView节点,使气球出现在鼠标坐标:
private void treeView1_MouseMove(object sender, MouseEventArgs e)
{
node = treeView1.getNodeAt(e.X, e.Y);
toolTip1 = new ToolTip();
toolTip1.IsBalloon = true;
toolTip1.InitialDelay = 500;
toolTip1.SetToolTip(treeView1, node.Text);
}
Run Code Online (Sandbox Code Playgroud)
问题是,ToolTip分配给TreeView,而不是TreeNode,并且气球的位置是非常奇怪的 - 不是在预期的鼠标坐标,而是在某处treeView1.
我试图使用,toolTip1.Show()但InitialDelay财产被忽略.
如何将气球ToolTip放在a上TreeNode并延迟显示?
可有一个人给我解释一下,怎么样MultiSelectStyle,Selected和Selected.Count性能适用于TTreeView在Delphi 7?我已经离开德尔福编码多年,除非有人指出我,我错过了什么,我认为这背后绝对没有逻辑.
到了这一点.我有一个例程,填充TTreeView所选文件夹的内容.它使用recurence,因此每个文件夹都表示为带子项的节点 - 它是子文件夹和文件.用户可以在树上选择多个项目,因为MultiSelect设置为True.在MultiSelectStyle小组中我也设置了所有四个子属性True(也许这是一个错误).
作为我的程序的调试(完全相反,我希望)我有这个代码:
ShowMessage(IntToStr(tvShell.Selected.Count) + ' selected');
for i := 0 to (tvShell.Selected.Count - 1) do
begin
ShowMessage(tvShell.Selected.Item[i].Text);
end;
Run Code Online (Sandbox Code Playgroud)
所以我运行我的程序并选择任何文件夹.树渲染,我看到:
Text六个子节点,因为所选文件夹包含六个子文件夹而没有文件,使用Ctrl和鼠标,我选择第一个(44个文件)和最后一个(9个文件)树节点(根节点的子节点)并点击执行上述调试代码的按钮.

我期待什么?我看到两个项目被选中.由于msVisibleOnly被设置为True中MultiSelectStyle,我希望有tvShell.Selected.Count设置2,看到三个消息.
我能得到什么?第一条消息说我有...... 选择了九个项目,当我继续时,我会收到另外九条消息,向我显示最后一个文件夹(树儿童)的内容.最有趣的部分是,tvShell.Selected 没有那两个的迹象,实际上是我选择的!WTF?
无意义继续......
我重复所有这些步骤,但这次我选择(点击)最后一个文件夹(子项)并Ctrl按下按钮,我点击第一个文件夹(root的子项).作为一个人,我再次看到,我选择了两个项目.当看到这棵树时,我在视觉上看到选择没有区别.但德尔福确实如此.
在执行调试代码时,这次我得到的信息是有 …
所以我有这个控制模板,我想要signalnamepanel(只是一个时间标签,我将在它旁边添加一个x轴)只有当项目绑定到Treeview时才会显示.
否则它看起来会很奇怪,因为namepanel会自动浮动.我猜我需要使用某种类型的触发器,但我不确定我会触发什么.
<Style x:Key="{x:Type TreeView}" TargetType="TreeView">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TreeView">
<ScrollViewer
Focusable="False"
CanContentScroll="False"
Padding="4">
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="19" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="{Binding ElementName=graph_viewer, Path=signal_graph_window_width, Mode=OneWay}" />
</Grid.ColumnDefinitions>
<wpfExp:SignalNamePanel Grid.Column="1"
Height="{Binding ElementName=graph_viewer, Path=GraphHeight, Mode=OneWay}"
MainText="Time"
/>
<wpfExp:SignalGraphAxis Grid.Column="2"
Height="{Binding ElementName=graph_viewer, Path=GraphHeight, Mode=OneWay}"
PenWidth="{Binding ElementName=graph_viewer, Path=GraphPenWidth, Mode=OneWay}"
X_Scale="{Binding ElementName=graph_viewer, Path=X_Scale, Mode=OneWay}"
MaxTimeValue="{Binding ElementName=graph_viewer, Path=_SignalDataViewModel.MaxTimeValue, Mode=OneWay}"
/>
</Grid>
<ItemsPresenter/>
</StackPanel>
</ScrollViewer>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver"
Value="True"> …Run Code Online (Sandbox Code Playgroud) 我正在选择我所拥有的所有控件 form
如果是控件Treeviews,我将迭代他们拥有的所有节点
我需要类似的东西:(这是我的代码)
foreach (Control c in PanelSM.Controls)
{
if (c is TreeView)
{
TreeNodeCollection myNodes = c.Nodes;//<<<<< Here is a mistake
foreach (TreeNode n in myNodes)
{
String text = rm.GetString(n.Name);
//And more things
//...
//...
//...
}
}
//...
}
Run Code Online (Sandbox Code Playgroud)
任何的想法?
谢谢
我试图根据特定的标志隐藏树视图中的一些行,这是我的树视图的xml代码:
<record model='ir.ui.view' id='my_object_tree'>
<field name="name">my_object.tree</field>
<field name="model">my_object</field>
<field name="arch" type="xml" >
<tree string="title" attrs="{'invisible': [('my_flag','=',False)]}">
<field name="name"/>
<field name="my_flag"/>
</tree>
</field>
</record>
Run Code Online (Sandbox Code Playgroud)
但似乎"隐形"在这里不起作用,我可以隐藏所有字段,但在这种情况下,空行将出现在树视图中.还有其他解决方案吗?
我试图在选择事件时返回tkinter树视图选择的父级,所以如果选择更改为"child",我希望它打印"parent",下面的工作示例,目前它打印选择,而不是父级选择:
try:
import tkinter as tk
import tkinter.ttk as ttk
except ImportError:
import Tkinter as tk
import ttk
class App:
def __init__(self):
self.root = tk.Tk()
self.tree = ttk.Treeview(selectmode='browse')
self.tree.pack(side="top", fill="both")
self.tree.bind('<<TreeviewSelect>>', self.tree_select_event)
self.parent_iid = self.tree.insert("", "end", text="Parent")
self.child_iid = self.tree.insert(self.parent_iid, "end", text="Child")
self.root.mainloop()
def tree_select_event(self, event):
print (self.tree.item(self.tree.selection()[0])['text'])
if __name__ == "__main__":
app = App()
Run Code Online (Sandbox Code Playgroud)
目前在选择Child时打印:
"Child"
Run Code Online (Sandbox Code Playgroud)
选择孩子时所需的输出:
"Parent"
Run Code Online (Sandbox Code Playgroud) 当我调整窗口高度时,如何调整树视图大小?我尝试设置sticky="sn",我试图打包树视图fill='y',但没有任何效果.
import tkinter as tk
from tkinter.ttk import Treeview
root = tk.Tk()
f1 = tk.Frame(root)
f2 = tk.Frame(root)
f1.grid(column=0, row=0, sticky="s")
f2.grid(column=1, row=0, sticky="n")
root.rowconfigure(0, weight=1)
Treeview(f1).pack()
tk.Button(f2, text="DAT BUTTON IS IN F2").pack()
tk.Button(f2, text="DAT BUTTON IS IN F2").pack()
tk.Button(f2, text="DAT BUTTON IS IN F2").pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)