基于WPF实现面包屑效果的示例代码

这篇文章主要为大家详细介绍了如何基于WPF实现面包屑效果,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以了解一下

WPF 简单实现面包屑

框架使用.NET4 至 .NET6

Visual Studio 2022;

面包屑展示使用控件如下:

  • Button 做首页按钮,当点击时回到首页。
  • ItemsControl 做面包屑 Item 展示,DataTemplate -> Hyperlink > 做点击时回到当前 Item

ListView 展示当前 Item 的子项,也可以换做 ListBox 控件或其他。

效果图

实现代码

1)创建 BreadCrumbBarExample.xaml 代码如下:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            "/>                                                                                                                                                                                                                          

2) BreadCrumbBarExample.xaml.cs 代码如下:

  • BreadCrumbBars 记录面包屑的值。
  • Files 记录当前的子项。
  • 当点击面包屑则删除当前至末尾的所有数据 List.RemoveRange(0, List.Count - 0);
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace WpfApp1 {     ///      /// BreadCrumbBarExample.xaml 的交互逻辑     ///      public partial class BreadCrumbBarExample : INotifyPropertyChanged     {         private ObservableCollection files;         public ObservableCollection Files         {             get { return files; }             set { files = value; OnPropertyChanged(); }         }         private ObservableCollection breadCrumbBars;         public ObservableCollection BreadCrumbBars         {             get { return breadCrumbBars; }             set { breadCrumbBars = value; OnPropertyChanged(); }         }         private FolderItem filesSelectedItem;         public FolderItem FilesSelectedItem         {             get { return filesSelectedItem; }             set { filesSelectedItem = value; OnPropertyChanged(); }         }         public BreadCrumbBarExample()         {             InitializeComponent();             FilesListView.SelectionChanged += FilesListView_SelectionChanged;             DataContext = this;             BreadCrumbBars = new ObservableCollection();             Files = new ObservableCollection();             Loaded += BreadCrumbBarExample_Loaded;         }         private void BreadCrumbBarExample_Loaded(object sender, RoutedEventArgs e)         {             GetHome();         }         private void btnHome_Click(object sender, RoutedEventArgs e)         {             Files.Clear();             GetHome();             var array = BreadCrumbBars.ToList();             array.RemoveRange(0, BreadCrumbBars.Count - 0);             BreadCrumbBars = new ObservableCollection(array);         }         private void Hyperlink_Click(object sender, RoutedEventArgs e)         {             var hyperlink = (Hyperlink)sender;             if (hyperlink == null) return;             var model = (FolderItem)hyperlink.DataContext;             if (model == null) return;             LinkFolder(model);         }                 private void FilesListView_SelectionChanged(object sender, SelectionChangedEventArgs e)         {             if (FilesSelectedItem == null) return;             BreadCrumbBars.Add(FilesSelectedItem);             AddFolder(FilesSelectedItem);                      }         private void LinkFolder(FolderItem folderItem)         {             var index = BreadCrumbBars.IndexOf(folderItem);             if (index < BreadCrumbBars.Count)             {                 var array = BreadCrumbBars.ToList();                 if(index == 0)                 {                     index += 1;                     array.RemoveRange(index, BreadCrumbBars.Count - index);                 }                 else                     array.RemoveRange(index, BreadCrumbBars.Count - index);                 BreadCrumbBars = new ObservableCollection(array);             }             AddFolder(folderItem);         }         void AddFolder(FolderItem folderItem)         {             try             {                 if (folderItem == null) return;                 FilesListView.SelectedIndex = -1;                 FilesListView.SelectedItem = null;                 Files.Clear();                 var list = new ObservableCollection();                 if (File.Exists(folderItem.FullName)) return;                 var directory = new DirectoryInfo(folderItem.FullName + @"\");                 if (directory.GetDirectories() == null) return;                 foreach (var item in directory.GetDirectories())                 {                     var fileInfo = new FolderItem() { Name = item.Name, FullName = item.FullName };                     if (list.Contains(fileInfo)) continue;                     Files.Add(fileInfo);                 }                 foreach (var item in directory.GetFiles())                 {                     var fileInfo = new FolderItem() { Name = item.Name, FullName = item.FullName };                     if (list.Contains(fileInfo)) continue;                     Files.Add(fileInfo);                 }             }             catch (Exception)             {                 throw;             }         }         void GetHome()         {             DriveInfo[] allDrives = DriveInfo.GetDrives();             foreach (DriveInfo drive in allDrives)             {                 if (drive.IsReady == true)                 {                     var fileInfo = new FolderItem() { Name = drive.Name, FullName = drive.Name };                     Files.Add(fileInfo);                 }             }         }         public event PropertyChangedEventHandler PropertyChanged;         protected void OnPropertyChanged([CallerMemberName] string propertyName = "")         {             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));         }            }     public class FolderItem     {         public string Name { get; set; }         public string FullName { get; set; } = string.Empty;     } } 

到此这篇关于基于WPF实现面包屑效果的示例代码的文章就介绍到这了,更多相关WPF面包屑内容请搜索0133技术站以前的文章或继续浏览下面的相关文章希望大家以后多多支持0133技术站!

以上就是基于WPF实现面包屑效果的示例代码的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 其他教程