内置的WPF TreeView控件不允许多选,就像ListBox一样.如何自定义TreeView以允许多重选择而无需重写.
有没有办法在WPF中自动扩展树视图中的所有节点?我搜索了,甚至没有在treeview属性中找到扩展函数.
谢谢
我知道有ExpandableListView但它最多只支持2个级别.我需要一个真正的树视图垂直列表,至少最多约5个级别(越多越好).
有什么建议?
编辑:
我看到有关使用自定义适配器并根据项目级别设置填充的说明.
我有一个没有排序的ArrayList对象具有ID和父ID,我也动态地向这个数组添加项目.
谁能给我一些我可以这样做的例子?
System.Web.UI.WebControls.TreeView类提供此事件,但TreeView的Forms版本不提供此事件.形式世界中的等价物是什么?我正在使用AfterSelect,但它似乎不太正确.也许它实际上是我正在寻找但文档有点模糊.
如何在WPF中展开所有TreeView节点?在WinForms中有一个ExpandAll()方法来执行此操作.
我正在寻找一个JQuery Checkbox Treeview.有谁知道一个好的存在吗?
如果启用了TreeView具有各种大小的项目的虚拟化,则会出现多个问题:
垂直滚动条随机更改其大小,并且在查看整个树后不记得元素的大小.用鼠标滚动很难.
在上下滚动之后,ArgumentNullException会从框架代码中抛出.
重现很简单:创建一个新的WPF应用程序,然后将此代码放入MainWindow.xaml中
<Window x:Class="VirtualTreeView.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="800" Width="400" Left="0" Top="0"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<TreeView x:Name="tvwItems" ItemsSource="{Binding Items}"
VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling">
<TreeView.ItemTemplate>
<DataTemplate>
<Border Height="{Binding Height}" Width="{Binding Height}"
BorderThickness="1" Background="DarkGray" BorderBrush="DarkBlue"/>
</DataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
并将此代码放入MainWindow.xaml.cs
using System.Collections.ObjectModel;
using System.Linq;
namespace VirtualTreeView
{
public partial class MainWindow
{
public ObservableCollection<Item> Items { get; set; }
public MainWindow ()
{
Items = new ObservableCollection<Item>(Enumerable.Range(0, 20).Select(i => new Item {
Height = i*20, …Run Code Online (Sandbox Code Playgroud) 我对WPF Treeview Binding有一些复杂的情况.我花了最近两天的时间尝试谷歌,这是我提出的关闭,但它没有解决问题.
情况如下:
我有一个看起来像这样的对象:
public class Category
{
public string Name { get; set; }
public List<Category> Categories { get; set; }
public List<Product> Products { get; set; }
}
public class Product
{
public string Name { get; set;
}
Run Code Online (Sandbox Code Playgroud)
每个类别都可以包含对象列表和子类别.我有理由这样做对我和我正在写的应用程序完全有意义.
实际的对象构造可能看起来像这样:
Category - Pharmacy
|-Product - Aspirin
|-Product - Tylenol
|-Category - Tooth Paste
| |-Product - Crest
| |-Product - Colgate
|-Category - Paper Products
|-Category - Toilet Paper
| |-Product - NoName
| …Run Code Online (Sandbox Code Playgroud) wpf treeview binding hierarchicaldatatemplate hierarchical-data
我正在一个小C#/ Winforms应用程序中试验树视图.我已经以编程方式将一个ImageList分配给树视图,并且所有节点都显示它们的图标就好了,但是当我单击一个节点时,它的图标会改变(到ImageList中的第一个图像).如何让图标保持不变?
BTW:"SelectedImageIndex"被设置为"(none)",因为我真的不知道要设置什么,因为图像索引对于节点是不同的(我猜?).
更新:这是应用程序的代码(我正在使用Visual Studio Express 2008):
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
treeView1.BeginUpdate();
treeView1.Nodes.Clear();
treeView1.Nodes.Add("root","Project", 0);
treeView1.Nodes[0].Nodes.Add("Foo", "Foo", 2);
treeView1.Nodes[0].Nodes[0].Nodes.Add("Fizz", "Fizz", 3);
treeView1.Nodes[0].Nodes[0].Nodes.Add("Buzz", "Buzz", 3);
treeView1.Nodes[0].Nodes.Add("Bar", "Bar", 1);
treeView1.Nodes[0].Nodes[1].Nodes.Add("Fizz", "Fizz", 2);
treeView1.Nodes[0].Nodes[1].Nodes[0].Nodes.Add("Buzz", "Buzz", 3);
treeView1.EndUpdate();
treeView1.ImageList = imageList1;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正面临TreeView控制方面的问题.我为TreeView控制节点启用了复选框.它工作正常,显示正常.但是,当我将其部署到IIS时,复选框在那里不可见.它根本没有渲染.以下是TreeView:
<asp:TreeView id="tvExplicit"
EnableClientScript="true"
PopulateNodesFromClient="true"
ExpandDepth="0"
ShowLines="true"
ShowExpandCollapse="true"
ShowCheckBoxes="Root"
OnTreeNodePopulate="tvExplicit_TreeNodePopulate"
Width="1px"
runat="server">
<Nodes>
</Nodes>
</asp:TreeView>
Run Code Online (Sandbox Code Playgroud)
此代码在我的本地计算机上正常运行.但不是在IIS上部署时.一切正常,除了显示根节点的复选框.
注意:复选框根本不会呈现为HTML.因此,根据我的说法,它不是CSS阻止它
更新:我能够发现该页面的先前版本已缓存在IIS中,即使在重置APP池后也未重置.
第二次更新:在本地主机的复选框的客户编号是ctl00_MainContent_tvExplicitn0CheckBox,ctl00_MainContent_tvExplicitn1CheckBox等.这就是问题的原因.我注意到的另一件事是为localhost和部署到IIS的服务器中的控件生成的客户端ID的差异.下面是渲染<a>,它是两个树视图控件的一部分:
MainContent_tvExplicitt0,MainContent_tvExplicitt1这是树视图节点链路的IDctl00_MainContent_tvExplicitt0,ctl00_MainContent_tvExplicitt2,等因此问题可能与如何在不同的环境中实际呈现控件有关,即我的localhost和IIS服务器.在localhost中,.Net 3.5 framework是否存在于IIS服务器中.Net 4.因此可能是因为这client ID两个版本的生成都不同.
第三次更新
此外,我将框架版本更改为.net 4in localhost,但它没有重现该问题.它也添加controlRenderingCompatibilityVersion="3.5"了web.config.然后我将相同的代码部署到IIS,我得到的错误controlRenderingCompatibilityVersion不是有效标记.这是否意味着IIS服务器没有运行..net 4我自己无法访问IIS服务器.
第4次更新:
应用程序.net 4在IIS中配置了版本.
第五次更新 我将相同的构建部署到不同机器上的另一台IIS服务器(这些是我们运行应用程序的旧服务器).并且可以看到复选框..net框架的版本与面临问题的版本相同.要求相关团队将这些服务器中的相同设置更新为面临问题的服务器.它仍然没有帮助.因此,在新的服务器上配置网站的方式确实存在问题,其中复选框不可见