WPF默认的TreeView非常好,我仍然希望它的每个子元素都有行连接,就像Windows Forms TreeView一样.我在互联网上搜索并有一些例子,但设计得不够好.
如何使用WPF实现它?
我陷入了.NET 2.0 Windows Forms.
它看起来不像标准TreeView控件中存在选择多个节点的能力.
我正在尝试为上下文菜单选择执行此操作.因此,复选框不是可接受的UI范例.
提供非常必要的功能的最佳方法是什么?
如何在.NET应用程序中维护树视图控件的滚动位置?例如,我有一个树视图控件,并通过添加各种节点的过程将它们固定到底部.在此过程中,我可以滚动树视图并查看不同的节点.问题是当进程完成时,树视图滚动到最底部.
似乎调用treenode.Expand()是让我偏离轨道的原因.展开父节点时,它将获得焦点.
有没有解决的办法?如果我在进程运行时查看特定节点,我不希望它在进程完成时跳转到我身边.
我正在尝试从文件夹路径列表填充树视图,例如:
C:\WINDOWS\addins
C:\WINDOWS\AppPatch
C:\WINDOWS\AppPatch\MUI
C:\WINDOWS\AppPatch\MUI\040C
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI\0409
Run Code Online (Sandbox Code Playgroud)
像这样的输出:
????addins
????AppPatch
? ????MUI
? ????040C
????Microsoft.NET
? ????Framework
? ????v2.0.50727
? ????MUI
? ????0409
Run Code Online (Sandbox Code Playgroud)
请注意列表中没有'C:\ WINDOWS\Microsoft.NET'或'C:\ WINDOWS\Microsoft.NET\Framework'.我已经工作了将近两天,我的代码中有一堆bug.希望我能从这里得到帮助.
谢谢.
埃里克
我有一个包含这些数据的假设树视图:
RootNode
Leaf
vein
SecondRoot
seeds
flowers
Run Code Online (Sandbox Code Playgroud)
我试图过滤节点,以便只显示包含特定文本的节点.假如我指定"L",树将被过滤并仅显示RootNode-> Leaf和SecondRoot-> flowers(因为它们都包含字母L).
在mv-vm模式之后,我有一个基本的TreeViewViewModel类,如下所示:
public class ToolboxViewModel
{
...
readonly ObservableCollection<TreeViewItemViewModel> _treeViewItems = new ObservableCollection<TreeViewItemViewModel>();
public ObservableCollection<TreeViewItemViewModel> Headers
{
get { return _treeViewItems; }
}
private string _filterText;
public string FilterText
{
get { return _filterText; }
set
{
if (value == _filterText)
return;
_filterText = value;
ICollectionView view = CollectionViewSource.GetDefaultView(Headers);
view.Filter = obj => ((TreeViewItemViewModel)obj).ShowNode(_filterText);
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
一个基本的TreeViewItemViewModel:
public class ToolboxItemViewModel
{
...
public string Name { get; private set; …Run Code Online (Sandbox Code Playgroud) XAML
<TreeView Name="GroupView" ItemsSource="{Binding Documents}">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="OnTreeNodeDoubleClick"/>
</Style>
</TreeView.ItemContainerStyle>
....
</TreeView>
Run Code Online (Sandbox Code Playgroud)
代码隐藏
private void OnTreeNodeDoubleClick(object sender, MouseButtonEventArgs mouseEvtArgs)
{
Console.WriteLine("{3} MouseDoubleClick Clicks={0} ChangedButton={1} Source={2} Handled={4} ButtonState={5}",
mouseEvtArgs.ClickCount, mouseEvtArgs.ChangedButton, mouseEvtArgs.OriginalSource,
mouseEvtArgs.Timestamp, mouseEvtArgs.Handled, mouseEvtArgs.ButtonState);
}
Run Code Online (Sandbox Code Playgroud)
我发现只需双击一次,就会多次调用事件处理程序.我试图在选项卡中打开一个文件,双击相应的树节点; 所以我需要过滤掉额外的电话.
23479156 MouseDoubleClick Clicks=1 ChangedButton=Left Source=System.Windows.Controls.TextBlock Handled=False ButtonState=Pressed
23479156 MouseDoubleClick Clicks=1 ChangedButton=Left Source=System.Windows.Controls.TextBlock Handled=False ButtonState=Pressed
Run Code Online (Sandbox Code Playgroud)
在我稍微复杂的应用程序中,每次双击它会被提升4次.在一个简单的repro-app上,每次双击它会被提升2次.此外,所有的事件参数参数也是相同的,所以我无法区分最后一个参数.
任何想法为什么这是它的方式?
我正在寻找一个WPF控件,它是TreeView和DataGrid的混合体,类似于Visual Studio调试器或QuickBooks联系人列表等.
关于如何在WPF中处理可编辑分层数据的任何其他解决方案也将非常受欢迎.

我正在使用JQuery插件jsTree,http://www.jstree.com/ 我可以使用以下方法扩展整个树:
$("#tree").jstree("open_all");
Run Code Online (Sandbox Code Playgroud)
还有一个特定的节点:
$("#tree").jstree("open_node", $('#childNode'));
Run Code Online (Sandbox Code Playgroud)
我很难打开树的一个分支,打开分支打开它很好,但如果它有一个就不打开它的父.
有没有人用jsTree成功完成这项工作?如果您需要更多信息,请告诉我.
谢谢
EEF
我需要编辑一些层次结构,我用TreeView用TextBoxes
简短的例子
<TreeView>
<TreeView.Items>
<TreeViewItem Header="Level 0">
<!-- Level 1-->
<TextBox Margin="5"
BorderThickness="1" BorderBrush="Black" />
</TreeViewItem>
</TreeView.Items>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
当我输入TextBox,+,-,字母和数字做工精细,箭头工作,但是当我按下-,Level 0项目崩溃并且当我输入*,没有任何反应
我应该如何处理-并按预期*看到它们TextBox?
编辑:
-如果输入Key.OemMinus但不是从数字键盘输入,则可以正常工作Key.Subtract
*如果键入为Shift+ Key.D8但不是数字键盘,则可以正常工作Key.Multiply
我有一个带有ToggleButton(ExpanderButton)的TreeView.togglebutton有两个图像(一个用于展开,一个用于展开).然而,当我选择一个TreeViewItem时,我用不同的颜色高亮一点,我也想改变图像的颜色(我在另一种颜色中有相同的颜色).
问题是我不知道如何在ToggleButton上将触发器属性设置为TreeViewItem上的IsSelected属性.
有任何想法吗?
treeview ×10
wpf ×5
c# ×4
.net ×3
winforms ×3
xaml ×2
.net-2.0 ×1
binding ×1
controls ×1
datagrid ×1
javascript ×1
jquery ×1
jstree ×1
mouseevent ×1
styles ×1
togglebutton ×1
treeviewitem ×1
triggers ×1
vb.net ×1
wpf-controls ×1