所以,我有一个树视图,其中有一个列表。我想对它应用一个过滤器,并且所有不符合过滤器上的单词的节点都会折叠,因此它们不会占用空间。
问题是,即使我将它们设置为折叠,它们仍然占用最少的空间......
<TreeView x:Name="UserTree">
<TreeView.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}"
Color="Black" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}"
Color="Transparent" />
<local:SumConverter x:Key="sumConverter"/>
</TreeView.Resources>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding UserList}">
<Border x:Name="headerTree" Background="#FFD3D1D1" CornerRadius="3" Padding="2"
Margin="2">
<Grid Width="330" Height="20">
<TextBlock Text="{Binding Name}" Name="txtGroupName" Width="280"
Height="20" FontFamily="Palatino Linotype" Foreground="Black" VerticalAlignment="Center"
AllowDrop="True" Drop="TextBlock_Drop" Padding="5,0,0,0" HorizontalAlignment="Left"
Margin="0,2,0,0" />
<CheckBox x:Name="cbSelector" HorizontalAlignment="Right"
VerticalAlignment="Center" Margin="0,0,5,0" Checked="cbSelector_Checked"
Unchecked="cbSelector_Unchecked" />
</Grid>
</Border>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<Grid Width="320" Visibility="{Binding isVisible}">
<CheckBox Margin="16,1,1,1" VerticalAlignment="center"
Checked="ChkUser_Checked" Unchecked="chkUser_Unchecked"
IsChecked="{Binding IsListed}"
PreviewMouseMove="CheckBox_PreviewMouseMove"
PreviewMouseLeftButtonDown="CheckBox_PreviewMouseLeftButtonDown" ToolTipService.ToolTip="
{Binding Section}">
<CheckBox.Content>
<MultiBinding Converter="{StaticResource sumConverter}">
<Binding Path="Name"/>
<Binding Path="Status"/>
</MultiBinding>
</CheckBox.Content>
</CheckBox>
<Image Source="{Binding ImagemStatus}" Width="16" Height="16"
HorizontalAlignment="Left" Margin="0,2,0,0" />
<Button x:Name="btnRemoveFromGroup" Click="btnRemoveFromGroup_Click" HorizontalAlignment="Right" Width="16px" Height="16px"
VerticalAlignment="Top" Style="{StaticResource MyButtonStyle}" Foreground="{x:Null}"
ToolTipService.ToolTip="Remove from group" Content="
{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type
TreeViewItem}, AncestorLevel=2}, Path=DataContext.ObtainGroup}">
<Button.Background>
<ImageBrush ImageSource="Imagens/Grp.png"/>
</Button.Background>
</Button>
</Grid>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded}"></Setter>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
<Style x:Key="MyButtonStyle" TargetType="Button">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Margin" Value="5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="border"
BorderThickness="0"
Padding="4,2"
BorderBrush="DarkGray"
CornerRadius="3"
Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="BorderBrush" Value="Black" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 0 :(得分:0)
当你启动一个进程时,它需要一些内存空间。创建实例时,它也会在内存中创建。将数据从一个实例移动到另一个实例不会释放内存。您必须处置该对象以将其释放。
好吧!在您的情况下,strings
中的treeview
为节点。 treeviewNode
存储一些额外信息。如果您不想delete
节点,那么您还有其他选择。
您可以将其保存在string
类型list
中,并dispose
可以treeview
该节点。 list
不会像node
那样存储太多信息。所以它会为你节省一些记忆。
答案 1 :(得分:0)
你正在解决这个问题。您应该在对象上设置一个递归函数,在每个集合上使用CollectionViewSource.GetDefaultView并在每个集合上设置Filter。然后,此过滤器将从树视图中删除这些项,但实际上不会删除它们。然后,您可以递归地将过滤器设置为null,并且所有项目都将再次可见。
答案 2 :(得分:0)
我认为您的问题可以通过以下代码解决:
<TreeView x:Name="UserTree">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}" BasedOn="{StaticResource {x:Type TreeViewItem}}">
<Setter Property="Visibility" Value="{Binding IsVisible}" />
</Style>
</TreeView.ItemContainerStyle>
...
</TreeView>
在您的“UserList”类中,您必须声明一个名为“IsVisible”的属性。将此属性设置为“折叠”时,treeviewitem不会在树视图中占用任何空间