C# 以编程方式添加到WPF Treeview的链接

C# 以编程方式添加到WPF Treeview的链接,c#,wpf,hyperlink,treeview,C#,Wpf,Hyperlink,Treeview,我的WPF应用程序中有一个简单的树状视图。内容是通过添加几个TreeViewItem(和子项)以编程方式构建的。 现在我想在每个TreeView项目中集成链接,如 “项目1()的文本” 链接应该是可点击的。 如何在代码中实现这一点,以及如何分配处理程序来执行“超链接操作”(例如Process.Start(linkStr))?XAML文件: <Window x:Class="SOTree.MainWindow" xmlns="http://schemas.microsoft.com/

我的WPF应用程序中有一个简单的树状视图。内容是通过添加几个TreeViewItem(和子项)以编程方式构建的。 现在我想在每个TreeView项目中集成链接,如 “项目1()的文本” 链接应该是可点击的。 如何在代码中实现这一点,以及如何分配处理程序来执行“超链接操作”(例如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());
        }
    }
}
使用System.Windows;
使用System.Windows.Navigation;
命名空间树
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有无效超链接\u RequestNavigate(对象发送方,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);

        }
    }
公共类菜单项
{
公共菜单项()
{
this.Items=新的ObservableCollection();
}
私有无效超链接\u RequestNavigate(对象发送方,RequestNavigateEventArgs e)
{
Process.Start(新的ProcessStartInfo(e.Uri.AbsoluteUri));
e、 已处理=正确;
}
公共字符串标题{get;set;}
公共ObservableCollection项{get;set;}
}
公共部分类主窗口:窗口
{
私有无效超链接\u RequestNavigate(对象发送方,RequestNavigateEventArgs e)
{
Process.Start(新的ProcessStartInfo(e.Uri.AbsoluteUri));
e、 已处理=正确;
}
公共主窗口()
{
初始化组件();
MenuItem root=new MenuItem(){Title=“Menu”};
MenuItem childItem1=新建MenuItem(){Title=”http://www.google.com" };
childItem1.Items.Add(新菜单项(){Title=”http://www.google.com" });
childItem1.Items.Add(新菜单项(){Title=”http://www.google.com" });
root.Items.Add(childItem1);
添加(新菜单项(){Title=”http://www.google.com" });
trvMenu.Items.Add(根目录);
}
}

谢谢!这在设计时非常有效。。。但是我如何通过代码添加/更改这样一个TreeView项目呢?啊。。。我明白了:TextBlock testextblock=newtextblock();Hyperlink tempHL=new Hyperlink(新运行(“WikipediaLink”){NavigateUri=new Uri(“)};tempHL.RequestNavigate+=new RequestNavigateEventHandler(Hyperlink_RequestNavigate);TELTEXTBLOCK.Inlines.Add(“这是到的链接”);TELTEXTBLOCK.Inlines.Add(tempHL);treeViewResult.Items.Add(TELTEXTBLOCK);