以编程方式将链接添加到 WPF Treeview

Add links to WPF Treeview programmatically

我的 WPF 应用程序中有一个简单的 TreeView。内容以编程方式添加几个 TreeViewItems(和子项)。 现在我想在每个 TreeViewItem 中集成链接 "Text of Item 1 (http://google.de)" 链接应该是可点击的。 如何在代码中实现此目的以及如何分配处理程序来执行 "Hyperlink Action"(例如 Process.Start(linkStr))?

XAML 文件:

<Window x:Class="SOTree.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>

    <TreeView Grid.Row="0" Grid.Column="1" Margin="30">
        My Treeview Title
        <TreeViewItem IsExpanded="True">
            <TextBlock IsEnabled="True">Wikipedia
                    <Hyperlink NavigateUri="http://www.wikipedia.org" RequestNavigate="Hyperlink_RequestNavigate">
                        Wikipedia
                    </Hyperlink>
            </TextBlock>
        </TreeViewItem>
    </TreeView>
</Grid>

后面的代码:

using System.Windows;
using System.Windows.Navigation;

namespace SOTree
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
        {
            System.Diagnostics.Process.Start(e.Uri.ToString());
        }
    }
}

希望对您有所帮助。

XAML 用于树视图

 <TreeView Name="trvMenu" Margin="367,29,0.2,154.6">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate DataType="{x:Type l:MenuItem}" ItemsSource="{Binding Items}">
                <TextBlock>          
                <Hyperlink NavigateUri="{Binding Title}"
                        RequestNavigate="Hyperlink_RequestNavigate">
                    <InlineUIContainer>
                        <TextBlock Text="{Binding Title}" />
                    </InlineUIContainer>
                </Hyperlink></TextBlock>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

带绑定的代码隐藏

    public class MenuItem
    {
    public MenuItem()
    {
        this.Items = new ObservableCollection<MenuItem>();
    }

    private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
    {
        Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
        e.Handled = true;
    }

    public string Title { get; set; }

    public ObservableCollection<MenuItem> Items { get; set; }
    }

    public partial class MainWindow : Window
    {

        private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
        {
            Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
            e.Handled = true;
        }

        public MainWindow()
        {
            InitializeComponent();


              MenuItem root = new MenuItem() { Title = "Menu" };
        MenuItem childItem1 = new MenuItem() { Title = "http://www.google.com" };
        childItem1.Items.Add(new MenuItem() { Title = "http://www.google.com" });
        childItem1.Items.Add(new MenuItem() { Title = "http://www.google.com" });
        root.Items.Add(childItem1);
        root.Items.Add(new MenuItem() { Title = "http://www.google.com" });
        trvMenu.Items.Add(root);

        }
    }