C# 以编程方式添加到WPF Treeview的链接
我的WPF应用程序中有一个简单的树状视图。内容是通过添加几个TreeViewItem(和子项)以编程方式构建的。 现在我想在每个TreeView项目中集成链接,如 “项目1()的文本” 链接应该是可点击的。 如何在代码中实现这一点,以及如何分配处理程序来执行“超链接操作”(例如Process.Start(linkStr))?XAML文件: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/
<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);