我有一个TreeView
在我的 WPF 应用程序中。在运行时我将数据绑定(bind)到 Treeview
。 TreeView 中的每个节点都与路径相关联。如果与元素关联的路径中的文件有错误,我应该更改 TreeView 元素的颜色。假设我需要将其更改为红色。
所以,因为我在 treeview
之后动态绑定(bind)它已完全加载,我应该再次遍历树,并且应该检查路径是否包含 TreeView
中每个元素的任何错误。 .
如何将整个 Tree 元素从父元素到根子元素一一导航,并对每个节点执行错误检查操作。
XAML 中的树:
<TreeView Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Name="treeView1"
VerticalAlignment="Stretch"
SelectedItemChanged="treeView1_SelectedItemChanged" HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Top" BorderThickness="0,0,0,1" BorderBrush="LightGray">
<TreeViewItem Header="Head Tree" ItemsSource="{Binding MainComps}">
<TreeViewItem.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter Property="Foreground" Value="RED" />
</DataTrigger>
</Style.Triggers>
</Style>
</TreeViewItem.ItemContainerStyle>
<TreeViewItem.Resources>
<HierarchicalDataTemplate DataType="{x:Type TextBlock}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Head Tree" />
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:MainCompViewModel}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Maincompname}" />
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:FeatureViewModel}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FeatureName}" />
</StackPanel>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:CompViewModel}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Component}" />
</StackPanel>
</DataTemplate>
</TreeViewItem.Resources>
</TreeViewItem>
</TreeView>
在代码后面:
我有 TreeView 选择更改事件。 我怎样才能有 AfterTreeViewLoaded 事件。像这样的东西。
Void TreeviewLoaded()
{
//Identify error. Change the color
}
提前致谢..
最佳答案
当您创建树项目时,您应该有一些根项目列表并将该列表绑定(bind)到 TreeView.ItemsSource。
然后您可以随时检查路径并设置 bool 值 HasError (该属性应该存在于您的 ItemViewModel 中)。树项目的背景可以通过样式更改,如下所示:
<Setter Property="Background" Value="{Binding HasError, Converter={StaticResource HasErrorToBackroundConverter}" />
更新:
请参阅以下文章http://blog.clauskonrad.net/2011/04/how-to-make-hierarchical-treeview.html 。
您的ItemViewModel
就像文章中的Folder
一样。
根项目列表是m_folders
。就像 Folder
包含 FullPath
一样,您的 ItemViewModel
将包含 Path
以及 HasError
属性.
当您需要检查路径时,您递归地传递m_folders
,从中读取路径,检查它并设置HasError
。
关于c# - WPF 中的 Treeview 加载事件之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16807082/