c# - 如何在 TreeView 控件的级别1和级别2中设置不同的样式?

标签 c# wpf treeview styles hierarchicaldatatemplate

我现在正在使用 TreeView。如您所见,CurrentMediumObjectivesChildrenObjective 是相同的对象类型,称为 Objective

此类有一个名为 Level 的属性,其中 ChildrenObjective 设置为 1,ChildrenObjective 设置为 2。

我想根据级别设置不同的DataTemplate

    <TreeView ItemsSource="{Binding CurrentMediumObjectives}"
        Margin="0,40,0,0">     
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding ChildrenObjective}">
                <TextBlock FontWeight="Bold">
                    <Run Text="Objective " />
                    <Run Text="{Binding Level}" />
                </TextBlock>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

我很困惑是否应该使用 DataTemplateSelector 还是 DataTrigger。 提前致谢。

最佳答案

也许您可以只使用触发器来显示每个模板。

也许是这样的:

<TreeView ItemsSource="{Binding CurrentMediumObjectives}" Margin="0,40,0,0">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding ChildrenObjective}">
                    <Grid>
                        <!--Data template for level 1-->
                        <TextBlock x:Name="level1" FontWeight="Bold">
                            <Run Text="Objective " />
                            <Run Text="{Binding Level}" />
                        </TextBlock>

                        <!--Data template for level 2-->
                        <TextBlock x:Name="level2" FontWeight="Bold" Foreground="Red">
                            <Run Text="Objective " />
                            <Run Text="{Binding Level}" />
                        </TextBlock>
                   </Grid>

                    <HierarchicalDataTemplate.Triggers>
                        <DataTrigger Binding="{Binding Level}" Value="1">
                            <Setter TargetName="level1" Property="Visibility" Value="Visible" />
                            <Setter TargetName="level2" Property="Visibility" Value="Collapsed" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Level}" Value="2">
                            <Setter TargetName="level2" Property="Visibility" Value="Visible" />
                            <Setter TargetName="level1" Property="Visibility" Value="Collapsed" />
                        </DataTrigger>
                    </HierarchicalDataTemplate.Triggers>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>

模型(猜测)

public class Objective 
{
    public int Level { get; set; }
}

public class CurrentMediumObjectives : Objective
{
    public ObservableCollection<ChildrenObjective> ChildrenObjective { get; set; }
}

public class ChildrenObjective : Objective
{
}

结果: enter image description here

关于c# - 如何在 TreeView 控件的级别1和级别2中设置不同的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13830682/

相关文章:

wpf - xaml 语法中的圆括号

WPF TextBlock 向左溢出文本

delphi - Firemonkey TTreeView - 在 TTreeViewItems、TValue 中存储对象引用

python - 在 tkinter ttk TreeView 中格式化单个单元格/项目而不是整行

c# - 参数无效,正在将字节数组转换为图像

c# - Firefox + Chrome 表格渲染问题

C#:当您枚举 SortedDictionary 时,它是否已排序?

c# - 使用枚举值表示两个枚举值

c# - 如何创建不随 AdornedElement 缩放的装饰器?

c# - 阻止 TreeView 中的自动水平滚动不起作用。 MVVM、XAML 方法