以编程方式将链接添加到 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);
}
}
我的 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);
}
}