我正在开发一个TreeView基于控件,我的双击事件继续冒泡我的TreeViewItem节点.
目标是TreeViewItem双击时展开或折叠.
我有一个样式,将事件的事件处理程序应用于MouseDoubleClick每个TreeViewItem.
这是处理事件的代码
private void TreeViewItemDoubleClicked( object sender, RoutedEventArgs e )
{
// Get the specific tree view item that was double clicked
TreeViewItem treeViewItem = sender as TreeViewItem;
// not null?
if( null != treeViewItem )
{
// Switch expanded state
if( true == treeViewItem.IsExpanded )
{
treeViewItem.IsExpanded = false;
}
else
{
treeViewItem.IsExpanded = true;
}
// Set event handled
e.Handled = true; // [1]
}
} …Run Code Online (Sandbox Code Playgroud) 当用户右键单击树视图行时,如何执行某些操作?
是否可以更改JavaFX 2.2 TreeVIew的展开和折叠图像?
更改此图片,

对于这样的图像(带+/-),

我正在编写一个应用程序,我需要在整个行中按项目设置背景。我在这里找到了一些灵感,但我不知道如何在模板中获得边框背景值(问题有点复杂:)
我的问题是在树形视图中有两种类型的“数据”(文件和文件夹)。用户可以在文件和文件夹下修改背景。
现在,我在textblock上有背景,但它看起来很可怕,我想在整行中都具有背景(我认为它看起来会好得多)。
现在看来是这样的:

但是我需要的是:

如果我更改边框背景的值,则会更改所有项目(从逻辑上)。所以我想我真的需要使用textblock背景,但是我无法遍及整个行(stretch不是解决方案,因为它只是将其传播到行的末尾而不是之前的空白)。
谢谢你的建议。
编辑: XAML在这里:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:treeView">
<!-- TREEVIEW -->
<Style x:Key="ExpandCollapseToggleStyle" TargetType="ToggleButton">
<Setter Property="Focusable" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Grid
Width="15"
Height="13"
Background="Transparent">
<!--<Path x:Name="ExpandPath"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Margin="1,1,1,1"
Fill="Red"
Data="M 4 0 L 8 4 L 4 8 Z"/>-->
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked"
Value="True">
<!--<Setter Property="Data"
TargetName="ExpandPath"
Value="M 0 4 L 8 4 L 4 8 Z"/>-->
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="TreeViewItemFocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Border> …Run Code Online (Sandbox Code Playgroud) 我觉得我在WPF数据绑定中缺少一些基本概念.我的装订是否会对我有用,这总是一杆三风.
在此示例中,我希望将TreeViewItem的IsExpanded属性双向绑定到绑定对象上的相应属性.它确实适用于第一个例子; 它与第二个没有关系.
有谁能解释为什么?我无法理解为什么第二个版本不起作用.如果可以的话,我不禁想到它会拯救我无尽的悲伤.
这在放入UserControl.Resources时有效(绑定到IsExpanded是通过应用于TreeViewItem的Style完成的:
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded"
Value="{Binding Path=IsExpanded, Mode=TwoWay}" />
</Style>
<DataTemplate DataType="{x:Type viewModels:FolderItem}">
<TreeViewItem ItemsSource="{Binding Folders}"
IsExpanded="{Binding Mode=TwoWay,Path=IsExpanded}" >
<TreeViewItem.Header>
<StackPanel Orientation="Vertical">
<Image Source="{Binding IconSource}"
Width="16" Height="16"
Margin="4,0,4,0" VerticalAlignment="Center" />
<TextBlock Text="{Binding Title}"
VerticalAlignment="Center" />
</StackPanel>
</TreeViewItem.Header>
</TreeViewItem>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
这不(在数据模板中直接绑定到IsExpanded):
<DataTemplate DataType="{x:Type viewModels:FolderItem}">
<TreeViewItem ItemsSource="{Binding Folders}"
IsExpanded="{Binding Path=IsExpanded,Mode=TwoWay}" >
<TreeViewItem.Header>
<StackPanel Orientation="Vertical">
<Image Source="{Binding IconSource}"
Width="16" Height="16" Margin="4,0,4,0"
VerticalAlignment="Center" />
<TextBlock Text="{Binding Title}"
VerticalAlignment="Center" />
</StackPanel>
</TreeViewItem.Header>
</TreeViewItem>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
DataTemplate用于以下Xaml片段,上面给出的数据模板用于执行数据转换.Documents是已正确绑定的FolderItems的可观察列表.
<TreeView ItemsSource="{Binding Documents}" />
Run Code Online (Sandbox Code Playgroud)
两个DataTemplates都显示文件树.但在第二种情况下,IsExpanded没有绑定(双向或其他方式).
未显示FileTtem的DataTemplating,它是FolderItem的叶节点.
我目前正在研究TreeViewJavaFX中的第一个.
文档中给出的示例如下:
TreeItem<String> root = new TreeItem<String>("Root Node");
root.setExpanded(true);
root.getChildren().addAll(
new TreeItem<String>("Item 1"),
new TreeItem<String>("Item 2"),
new TreeItem<String>("Item 3")
);
TreeView<String> treeView = new TreeView<String>(root);
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我们TreeItem手动构建树结构,即调用getChildren()每个有子节点的节点并添加它们.
是否有可能告诉TreeItem他"动态"建立自己的孩子?如果我可以将父子关系定义为函数,那将是完美的.
我会寻找类似以下的东西:
// Function that generates the child tree items for a given tree item
Function<TreeItem<MyData>, List<TreeItem<MyData>>> childFunction = parent -> {
List<TreeItem<MyData>> children = new ArrayList<>(
parent. // TreeItem<MyData>
getValue(). // MyData
getChildrenInMyData(). // List<MyData>
stream().
map(myDataChild -> new TreeItem<MyData>(myDataChild)))); // List<TreeItem<MyData>>
// …Run Code Online (Sandbox Code Playgroud) 我有一个带有HierarchicalDataTemplate的TreeView.
<HierarchicalDataTemplate x:Key="treeViewItemTemplate" ItemsSource="{Binding GetChildren}">
<DockPanel Margin="0,8,8,0">
<Image Source="{Binding GetImage}" Width="16" Height="16" />
<local:MonitorTriStateCheckBox Margin="4,0,0,0" IsChecked="{Binding IsChecked}" Click="CheckBox_Clicked" Tag="{Binding UniqueKey}" Style="{DynamicResource CheckBox}"></local:MonitorTriStateCheckBox>
<TextBlock Margin="4,0,0,0" Text="{Binding Name}" Style="{DynamicResource TextBlock}">
</TextBlock>
</DockPanel>
<HierarchicalDataTemplate.Triggers>
<Trigger Property="TreeViewItem.IsSelected" Value="True">
<Setter Property="TreeViewItem.Background" Value="Orange" />
</Trigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)
正如您在代码中看到的,我设置了TreeViewItem的选择触发器,但这没有任何效果.我试过这个:
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="Visibility" Value="{Binding IsVisible, Mode=TwoWay}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Orange" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)
但那也没有效果.
有没有人知道该怎么做,改变TreeViewItem的高亮颜色?
我想在树状视图项目上单击而不是在出现的菜单中运行命令。现在在我的package.json中,我有这个:
{
"command": "test.view.showError",
"when": "view == test.view && viewItem == test",
"group": "inline"
}
Run Code Online (Sandbox Code Playgroud)
现在,“ inline”将在您必须单击以运行命令的单词旁边放置一个图标,但是我希望在单击节点本身时运行该命令。
我将“组”更改为什么?还是我做完全不同的事情?
谢谢
我在Delphi中使用TTreeview组件,我已经定制了拖放功能.我开始向下拖动鼠标(因为它是自定义行为),但我不想在用户单击+/-或展开和折叠图标时启动拖动事件.
有没有办法知道用户是否点击了节点的标题或者展开/折叠图标?
谢谢!
我想创建一个 WPF TreeView,其中包含可拉伸以填充可用空间的 TreeViewItems。我以此为指导修改了 TreeViewItem 模板:https://social.msdn.microsoft.com/Forums/vstudio/en-US/cabcb3ba-80c0-4367-85b7-9b55adc81e65/stretch-treeview-items ?forum=wpf这很有效,因为我希望右侧的一个字符网格组件右对齐,并且长 TextBlock 占用可用空间 - 请参阅下面的代码,其中我的 TreeViewItems 之一的标题是网格。
但是,当我通过将右侧拖动到左侧来调整窗口大小时,当没有足够的空间容纳所有网格组件时,我期望长的 TextBlock 内容为“长长的,... " 开始缩小宽度,但右侧的 TextBlock 却被右侧窗口边缘切断。
如果我创建一个具有网格的全新示例,并将上面提到的网格放入其中一个网格单元格中(本质上是模拟 TreeView 模板中使用的网格),那么它会按照我的预期调整大小:当我调整大小时,TextBlock 的宽度会缩小。
有什么想法可以对 TreeViewItem 模板或我指定的标题进行哪些更改以获得我想要的大小调整行为?
<Window x:Class="TreeViewSimple3.MainWindow"
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TreeViewSimple3"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ControlTemplate x:Key="TreeViewItemStretchControlTemplate" TargetType="{x:Type TreeViewItem}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="19" Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}">
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="Focusable" Value="False"/>
<Setter Property="Width" Value="16"/>
<Setter Property="Height" Value="16"/>
<Setter …Run Code Online (Sandbox Code Playgroud) treeviewitem ×10
treeview ×6
wpf ×5
c# ×2
java ×2
.net ×1
click ×1
delphi ×1
expand ×1
gtktreeview ×1
highlight ×1
image ×1
javafx ×1
javafx-2 ×1
javafx-8 ×1
pygtk ×1
right-click ×1
routedevent ×1
wpf-controls ×1
xaml ×1