TreeView控件用于显示分层信息。
与 TreeView 一起使用时的 FadeTransition 问题
我遇到了与此处报告类似的问题。在我的应用程序中,我为具有多个组件的系统提供了“健康”状态项的树视图。要求是闪现一个&qu...
我有一个 WinForm TreeView 控件,用于显示 CaseNotes 的父子关系(我知道这对你们大多数人来说没有任何意义,但它可以帮助我可视化答案)。 我有一个数据表
有没有办法从 TTreeViewItem 中删除所有子项?我尝试了DeleteChildren,但这会导致崩溃。 我以为这是一个简单的问题,结果却产生了更多的问题。那个...
我已经进入xaml 我已经进入xaml <TreeView x:Name="FavoritesTreeView" SelectedItemChanged="FavpritesTreeView_SelectedItemChanged" PreviewMouseRightButtonUp="FavpritesTreeView_PreviewMouseRightButtonUp"> <TreeView.ItemTemplate> <HierarchicalDataTemplate DataType="{x:Type self:Node}" ItemsSource="{Binding Items}"> <StackPanel Orientation="Horizontal"> <Image Source="{Binding ImagePath}"/> <TextBlock x:Name="NodeTitle" Text="{Binding Title}" /> </StackPanel> </HierarchicalDataTemplate> </TreeView.ItemTemplate> 在 C# 中 private void FavpritesTreeView_PreviewMouseRightButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e) { // Select TreeView Node on right click before displaying ContextMenu // https://stackoverflow.com/questions/592373/select-treeview-node-on-right-click-before-displaying-contextmenu DependencyObject obj = e.OriginalSource as DependencyObject; TreeViewItem treeViewItem = GetDependencyObjectFromVisualTree(obj, typeof(TreeViewItem)) as TreeViewItem; if (treeViewItem != null) { // do someting } } 例如,如何获取 NodeTitle 项来更改其文本? 尝试过不同的方法但没有成功。我期待得到帮助来解决问题。 您可以简单地从 Source 的 MouseButtonEventArgs 属性中获取它: TreeViewItem treeViewItem = (TreeViewItem)e.Source;
Tkinter 树视图 - 获取光标下的项目 <ButtonPress-1>
我正在编写一个拖放应用程序,将数据从树视图拖到条目小部件。我希望能够在按下鼠标按钮时使用光标下方树中的项目。 我...
我正在开发一个 Flutter 应用程序,我需要从 JSON 数据生成树视图。树形视图如下图所示: 该表结构如下: 家长ID 儿童ID 标题 1 0 根1 2 0 根2 3 1 不...
我有一个包含三列的表(parentID、childID、treeName)。 我想从 json 数据生成树视图。 我已经尝试过什么? 有很多硬编码树视图的例子,但没有......
如何在 tkinter Treeview 小部件中垂直居中行文本?
我的问题是,在下面的示例中,突出显示的行中的文本位于顶部并且不是垂直居中的。 我想达到与CSS属性相同的效果&...
我想知道是否有任何方法可以让 mui 树视图作为 mui 自动完成下拉列表中的选项。我环顾四周但找不到任何参考资料或示例,任何
我使用了教程中的示例来对树视图中的列进行排序。它适用于第二列和第三列,但不适用于第一列。如果我点击标题,我会收到此错误: Tkinter 回调中出现异常
自动调整ttk.Notebook内Treeview(列宽和行高)的大小
我在 ttk.notebook 小部件的选项卡内创建了一个树视图。 我按照此描述来调整树视图表的大小。我还看到了 .pack 解决方案,但我不会混合 .grid 和 .pack()...
使用 Tkinter 显示 Excel 工作表并添加行,还提供更新任何框中存储的信息的选项
我研究了一些已经可用的 tkinter treeview 单元更新逻辑,我认为这是来自 https://www.youtube.com/watch?v=n5gItcGgIkk&t=2368s 的最佳解决方案。请告诉我,如果我们...
例如,让我们使用类创建一个 Treeview 小部件,如下所示: 类过滤器树: def __init__(self, master, 过滤器): self.master = 主人 self.filters = 过滤器 ...
如何判断何时可以安全设置 TreeView.SelectedItem?
这是一个非常简单的 xaml: 这是一个非常简单的 xaml: <TreeView x:Name="provenanceTree" ItemsSource="{x:Bind ProvenanceTreeItems}" SelectionMode="Single" SelectedItem="{x:Bind focus, Mode=TwoWay}" > <!-- Definitions in here --> </TreeView> 这里的想法是,控件有一个 focus,树视图的选择应该遵循该焦点。 大多数情况下,它有效。 但是,当焦点改变需要添加 ItemsSource 时,问题就出现了 - 也就是说:我试图在同一操作中添加一个项目并选择它。 当然,TreeView 会重绘,但不会选择任何内容 - 如果之前选择了任何内容,则会取消选择。 我尝试不在bindng中分配SelectedItem,而是在重新聚焦代码中分配,但我遇到了同样的问题。 我明白了:对 ItemsSource 的更改不会立即传递到 TreeView,因此我尝试选择树中没有的内容。 如何判断何时可以安全地选择新添加的项目? 有什么方法可以调整绑定,使其按预期工作吗? 您只需添加新项目并将其作为 SelectedItem 传递。例如,假设 TreeView 是 x:Named TreeViewControl: private void AddingTestButton_Click(object sender, RoutedEventArgs e) { var newItem = new ProvenanceTreeItems(); ProvenanceTreeItems.Add(newItem); TreeViewControl.SelectedItem = newItem; }
绑定到 TreeViewItem.IsExpanded 只有一种方式
我有以下控件(摘录) 我有以下控件(摘录) <TreeView x:Name="provenanceTree" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" ItemsSource="{x:Bind ProvenanceTreeItems}" SelectionMode="Single" > <TreeView.ItemTemplate> <DataTemplate x:DataType="local:IProvenance"> <TreeViewItem ItemsSource="{x:Bind Children}" IsExpanded="{x:Bind isExpanded, Mode=TwoWay}"> <!-- The template - not relevant here, I think --> </TreeViewItem> </DataTemplate> </TreeView.ItemTemplate> </TreeView> 当然,我的想法是我希望能够扩展和压缩数据源中的树视图项。 isExpanded 是在 IProvenance 的实现中定义的: public static DependencyProperty isExpandedProperty = DependencyProperty.Register( nameof (isExpanded), typeof (bool), typeof (Expandable), new PropertyMetadata (false)); public bool isExpanded { get=> (bool)GetValue(isExpandedProperty); set => SetValue(isExpandedProperty, value); } 我认为没有什么值得警惕的。 我的问题是双向绑定似乎不起作用。 当新项目添加到树中时,isExpanded中的值将被遵守(正如我可以通过更改属性元数据来显示的那样)。 当我使用 UI 扩展和压缩项目时,isExpanded 会正确更新。 但是,当我在填充树后更改代码中的 isExpanded 时,什么也没有发生。 (值更新正确 - 我在调试器中看到过 - 只是树视图没有改变。) 我找到了这个答案,但我认为它对我没有帮助,因为我使用的是Winui 3(其中HierarchicalDataTemplate不可用,并且样式内部的绑定是有问题的)。 我忘记了什么? 让我向您展示一个在其子项展开时展开的 TreeView 的工作示例: Shell.xaml <Page x:Class="WinUIApp1.Shell" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="using:WinUIApp1" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" mc:Ignorable="d"> <Grid RowDefinitions="Auto,*"> <StackPanel Grid.Row="0" Orientation="Horizontal"> <Button Content="Expanding Test" Click="ExpandingTestButton_Click"/> </StackPanel> <TreeView Grid.Row="1" ItemsSource="{x:Bind Items}"> <TreeView.ItemTemplate> <DataTemplate x:DataType="local:Item"> <TreeViewItem Content="{x:Bind Content}" IsExpanded="{x:Bind IsExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{x:Bind Children, Mode=OneWay}" /> </DataTemplate> </TreeView.ItemTemplate> </TreeView> </Grid> </Page> Shell.xaml.cs public sealed partial class Shell : Page { public Shell() { InitializeComponent(); AddTestItems(); } public ObservableCollection<Item> Items { get; } = []; private void AddTestItems() { var item1 = new Item("Item 1"); var item1Child1 = new Item("Item 1-1"); var item1GrandChild1 = new Item("Item 1-1-1"); var item1GrandChild2 = new Item("Item 1-1-2"); item1Child1.Children.Add(item1GrandChild1); item1Child1.Children.Add(item1GrandChild2); item1.Children.Add(item1Child1); Items.Add(item1); var item2 = new Item("Item 2"); var item2Child1 = new Item("Item 2-1"); var item2GrandChild1 = new Item("Item 2-1-1"); var item2GrandChild2 = new Item("Item 2-1-2"); item2Child1.Children.Add(item2GrandChild1); item2Child1.Children.Add(item2GrandChild2); item2.Children.Add(item2Child1); Items.Add(item2); } private void ExpandingTestButton_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) { Items[0].IsExpanded = true; //Items[0].Children[0].IsExpanded = true; } } Item.cs public partial class Item : ObservableObject { [ObservableProperty] private bool _isExpanded; public Item(string content) { Content = content; Children.CollectionChanged += Children_CollectionChanged; } public event EventHandler<bool>? IsExpandedChanged; public ObservableCollection<Item> Children { get; } = []; public string Content { get; } private void Children_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e) { if (e.NewItems != null) { foreach (Item child in e.NewItems) { child.IsExpandedChanged += Child_IsExpandedChanged; } } if (e.OldItems != null) { foreach (Item child in e.OldItems) { child.IsExpandedChanged += Child_IsExpandedChanged; } } } private void Child_IsExpandedChanged(object? sender, bool isExpanded) { if (isExpanded is true) { IsExpanded = true; } } partial void OnIsExpandedChanged(bool value) { IsExpandedChanged?.Invoke(this, value); } } 备注 ObservableObject 和 ObservableProperty 来自 CommunityToolkit.Mvvm NuGet 包。
我想用 Vala 在 Gtk+3 的树之间移动一些选定的项目。问题是我无法创建一个列表来包含所有必须删除的项目迭代,将它们添加到...
我的树视图定义如下: 我的树视图定义如下: <TreeView x:Name="ProvenanceTree" Grid.Column="0" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" ItemsSource="{x:Bind ProvenanceTreeItems}" SelectionMode="Single" ItemInvoked="ProvenanceTree_ItemInvoked" > <TreeView.ItemContainerStyle> <Style TargetType="TreeViewItem"> <Setter Property="Height" Value="20"/> <Setter Property="MinHeight" Value="10"/> <Setter Property="Margin" Value="0 0 0 0"/> <Setter Property="Padding" Value="0 0 0 0"/> <Setter Property="BorderThickness" Value="1"/> <Setter Property="BorderBrush" Value="Red"/> </Style> </TreeView.ItemContainerStyle> <TreeView.ItemTemplate> <DataTemplate x:DataType="local:IProvenance"> <TreeViewItem ItemsSource="{x:Bind Children}" IsExpanded="True"> <Grid Background="{x:Bind HighlightColor.dilutedBrush}" Margin="0 0 0 0" Padding="0 0 0 0"> <Grid.ColumnDefinitions> <ColumnDefinition Width="150"/> <ColumnDefinition Width="Auto" MinWidth="75"/> <ColumnDefinition Width="Auto" MinWidth="30" MaxWidth="100"/> </Grid.ColumnDefinitions> <TextBlock Text="{x:Bind name}" TextTrimming="CharacterEllipsis" ToolTipService.ToolTip="{x:Bind name}" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="0"/> <TextBlock Text="{x:Bind typeName}" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="1"/> <TextBlock Text="{x:Bind annotation}" TextTrimming="CharacterEllipsis" ToolTipService.ToolTip="{x:Bind annotation}" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="2"/> </Grid> </TreeViewItem> </DataTemplate> </TreeView.ItemTemplate> </TreeView> 它看起来像这样: 我在这里看到的是:每个 TreeViewItem 都被压缩到 20 像素高,正如它应该的那样。 (红色边框只是为了让我可以看到容器的范围 - 不打算保留它!)但是每个项目周围都有几个像素的背景,并且每个项目之间有几个像素的空间。 理想情况下,我想摆脱多余的空间,并将项目压缩在一起。 我可以增加填充和边距(正如您所期望的那样,填充会增加边框的大小,而边距会增加间距),但将它们设置为零显然不会消除它们,并且将它们设置为负数没有任何作用. 这些最小尺寸是在哪里定义的,有什么方法可以覆盖它们吗? 您可以覆盖 TreeViewItemPresenterPadding 资源。 <TreeView...> <TreeView.Resources> <Thickness x:Key="TreeViewItemPresenterPadding">0</Thickness> </TreeView.Resources> </TreeView> 您可以在 generic.xaml 文件中了解这一点。
您好, 我正在使用 Angular 4,也许你现在可以称我为新手。 我在谷歌上搜索树视图,发现了两个非常好的框架。 首先和ng2-tree(无法发布链接,没有足够的声誉......
我目前正在开发一个项目,涉及使用 C# 在 MVVM、WPF 应用程序中进行多树视图选择。树视图支持在...之间剪切、复制、移动和粘贴等功能