【问题标题】:Add links to WPF Treeview programmatically以编程方式添加到 WPF Treeview 的链接
【发布时间】:2016-01-05 21:14:34
【问题描述】:

我的 WPF 应用程序中有一个简单的 TreeView。内容是通过编程添加几个 TreeViewItems(和子项)建立的。 现在我想在每个 TreeViewItem 中集成链接,例如 “第 1 项的文本 (http://google.de)” 链接应该是可点击的。 如何在代码中实现这一点以及如何分配处理程序来执行“超链接操作”(例如 Process.Start(linkStr) )?

【问题讨论】:

    标签: c# wpf hyperlink treeview


    【解决方案1】:

    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());
            }
        }
    }
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢!这在设计时效果很好......但是如何通过代码添加/更改这样的 TreeViewItem?
    • 啊...我明白了:TextBlock tempTextBlock = new TextBlock();超链接 tempHL = new Hyperlink(new Run("WikipediaLink")) { NavigateUri = new Uri("wikipedia.org") }; tempHL.RequestNavigate += new RequestNavigateEventHandler(Hyperlink_RequestNavigate); tempTextBlock.Inlines.Add("这是指向"); tempTextBlock.Inlines.Add(tempHL);treeViewResult.Items.Add(tempTextBlock);
    【解决方案2】:

    用于树视图的 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);
    
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 2011-12-21
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多