none
Как сделать закладки для браузера на основе ListBox C# WPF? RRS feed

  • Вопрос

  • Мне нужно в моём браузере сделать закладки но не просто добавить url в ListBox а добавить ссылку + название сайта + иконку сайта в ListBoxItem как это можно сделать?
    18 июня 2018 г. 13:05

Ответы

  • Это можно сделать примерно вот так:

    MainWindow.xaml.cs

    using System;
    using System.Collections.Generic;
    using System.Windows;
    using System.Windows.Navigation;
    
    namespace WpfApp1
    {
    	public partial class MainWindow : Window
    	{
    		public MainWindow()
    		{
    			InitializeComponent();
    
    			var bookmarks = new List<Bookmark>();
    			bookmarks.Add(new Bookmark { Url = "https://www.stackoverflow.com/", FaviconUrl = "https://www.stackoverflow.com/favicon.ico", Name = "Stackoverflow" });
    			bookmarks.Add(new Bookmark { Url = "https://www.msn.com/", FaviconUrl = "https://www.msn.com/favicon.ico", Name = "MSN" });
    			bookmarks.Add(new Bookmark { Url = "https://www.google.com/", FaviconUrl = "https://www.google.com/favicon.ico", Name = "Google" });
    			bookmarks.Add(new Bookmark { Url = "https://www.asp.net/", FaviconUrl = "https://www.asp.net/favicon.ico", Name = "ASP.NET" });
    			listBox.ItemsSource = bookmarks;
    		}
    
    		private void hyperLink_RequestNavigate(object sender, RequestNavigateEventArgs e)
    		{
    			System.Diagnostics.Process.Start(e.Uri.ToString());
    		}
    	}
    
    	public class Bookmark
    	{
    		public String Name { get; set; }
    		public String Url { get; set; }
    		public String FaviconUrl { get; set; }
    	}
    }

    MainWindow.xaml

    <Window x:Class="WpfApp1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp1"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="300">
    	<Grid>
    		<ListBox Name="listBox">
    			<ListBox.ItemTemplate>
    				<DataTemplate>
    					<DockPanel>
    						<Image DockPanel.Dock="Left" Source="{Binding FaviconUrl}" Width="32" Height="32" />
    						<StackPanel DockPanel.Dock="Right" Margin="10 0 0 0">
    							<TextBlock Text="{Binding Name}"/>
    							<TextBlock>
    								<Hyperlink NavigateUri="{Binding Url}" Name="hyperLink" RequestNavigate="hyperLink_RequestNavigate">
    									<TextBlock Text="{Binding Url}"/>
    							   </Hyperlink>
    							</TextBlock>
    						</StackPanel>
    					</DockPanel>
    				</DataTemplate>
    			</ListBox.ItemTemplate>
    		</ListBox>
    	</Grid>
    </Window>

    Результат:

     
    18 июня 2018 г. 17:40

Все ответы

  • Это можно сделать примерно вот так:

    MainWindow.xaml.cs

    using System;
    using System.Collections.Generic;
    using System.Windows;
    using System.Windows.Navigation;
    
    namespace WpfApp1
    {
    	public partial class MainWindow : Window
    	{
    		public MainWindow()
    		{
    			InitializeComponent();
    
    			var bookmarks = new List<Bookmark>();
    			bookmarks.Add(new Bookmark { Url = "https://www.stackoverflow.com/", FaviconUrl = "https://www.stackoverflow.com/favicon.ico", Name = "Stackoverflow" });
    			bookmarks.Add(new Bookmark { Url = "https://www.msn.com/", FaviconUrl = "https://www.msn.com/favicon.ico", Name = "MSN" });
    			bookmarks.Add(new Bookmark { Url = "https://www.google.com/", FaviconUrl = "https://www.google.com/favicon.ico", Name = "Google" });
    			bookmarks.Add(new Bookmark { Url = "https://www.asp.net/", FaviconUrl = "https://www.asp.net/favicon.ico", Name = "ASP.NET" });
    			listBox.ItemsSource = bookmarks;
    		}
    
    		private void hyperLink_RequestNavigate(object sender, RequestNavigateEventArgs e)
    		{
    			System.Diagnostics.Process.Start(e.Uri.ToString());
    		}
    	}
    
    	public class Bookmark
    	{
    		public String Name { get; set; }
    		public String Url { get; set; }
    		public String FaviconUrl { get; set; }
    	}
    }

    MainWindow.xaml

    <Window x:Class="WpfApp1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp1"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="300">
    	<Grid>
    		<ListBox Name="listBox">
    			<ListBox.ItemTemplate>
    				<DataTemplate>
    					<DockPanel>
    						<Image DockPanel.Dock="Left" Source="{Binding FaviconUrl}" Width="32" Height="32" />
    						<StackPanel DockPanel.Dock="Right" Margin="10 0 0 0">
    							<TextBlock Text="{Binding Name}"/>
    							<TextBlock>
    								<Hyperlink NavigateUri="{Binding Url}" Name="hyperLink" RequestNavigate="hyperLink_RequestNavigate">
    									<TextBlock Text="{Binding Url}"/>
    							   </Hyperlink>
    							</TextBlock>
    						</StackPanel>
    					</DockPanel>
    				</DataTemplate>
    			</ListBox.ItemTemplate>
    		</ListBox>
    	</Grid>
    </Window>

    Результат:

     
    18 июня 2018 г. 17:40
  • Спасибо, и ещё один вопрос как после добавления закладки в ListBox сохранить его в файл а затем его прочитать при запуске программы?
    25 июня 2018 г. 20:11