You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP XAML TreeView创建方法及内容无法打印问题咨询

UWP XAML中TreeView控件的创建与内容打印解决方案

一、TreeView控件的创建方式

1. 静态声明(适合固定静态数据)

像你提供的代码一样,直接在XAML中手动定义节点层级:

<TreeView x:Name="treeview" Grid.Row="2" Background="Blue" HorizontalAlignment="Center">
    <TreeView.RootNodes>
        <TreeViewNode Content="color">
            <TreeViewNode.Children>
                <TreeViewNode Content="blue"/>
                <TreeViewNode Content="green"/>
                <TreeViewNode Content="red"/>
            </TreeViewNode.Children>
        </TreeViewNode>
    </TreeView.RootNodes>
</TreeView>

2. 动态数据绑定(适合动态生成的层级数据)

如果数据是动态变化的,推荐使用数据绑定结合HierarchicalDataTemplate:

  • 第一步:定义数据模型
public class TreeNodeModel
{
    public string Name { get; set; }
    public ObservableCollection<TreeNodeModel> Children { get; set; } = new ObservableCollection<TreeNodeModel>();
}
  • 第二步:XAML中配置绑定
<TreeView x:Name="dynamicTreeView" ItemsSource="{Binding RootNodes}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Name}"/>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>
  • 第三步:后台赋值数据
var rootNode = new TreeNodeModel { Name = "color" };
rootNode.Children.Add(new TreeNodeModel { Name = "blue" });
rootNode.Children.Add(new TreeNodeModel { Name = "green" });
rootNode.Children.Add(new TreeNodeModel { Name = "red" });
dynamicTreeView.DataContext = new { RootNodes = new List<TreeNodeModel> { rootNode } };

二、解决TreeView内容无法打印的问题

UWP直接打印TreeView控件可能因布局虚拟化或层级结构问题导致内容不完整,可通过以下步骤实现完整打印:

1. 递归遍历所有节点,收集文本内容

private List<string> GetAllTreeNodesText(TreeViewNode node, int indentLevel = 0)
{
    var nodeTexts = new List<string>();
    // 用缩进体现节点层级
    nodeTexts.Add(new string(' ', indentLevel * 2) + node.Content.ToString());
    
    // 递归处理子节点
    foreach (var childNode in node.Children)
    {
        nodeTexts.AddRange(GetAllTreeNodesText(childNode, indentLevel + 1));
    }
    return nodeTexts;
}

2. 生成可打印文档并触发打印

private async void PrintTreeViewContent()
{
    var printDocument = new PrintDocument();
    printDocument.PrintPage += (sender, args) =>
    {
        // 创建文本块承载所有节点内容
        var contentTextBlock = new TextBlock
        {
            Text = string.Join(Environment.NewLine, GetAllTreeNodesText(treeview.RootNodes[0])),
            FontSize = 12,
            Width = args.PrintableArea.Width,
            TextWrapping = TextWrapping.Wrap
        };
        args.PageVisual = contentTextBlock;
    };

    // 唤起系统打印对话框
    await PrintManager.ShowPrintUIAsync();
}

3. 触发打印操作

添加打印按钮并绑定事件:

<Button Content="打印TreeView内容" Click="PrintButton_Click"/>
private void PrintButton_Click(object sender, RoutedEventArgs e)
{
    PrintTreeViewContent();
}

注意:如果你的TreeView节点使用了自定义模板(非纯文本Content),需要修改GetAllTreeNodesText方法,从模板元素中提取实际显示的内容。

内容的提问来源于stack exchange,提问作者ailsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:30:27