欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于WPF實(shí)現(xiàn)面包屑效果的示例代碼

 更新時(shí)間:2023年04月26日 09:49:48   作者:WPF開發(fā)者  
這篇文章主要為大家詳細(xì)介紹了如何基于WPF實(shí)現(xiàn)面包屑效果,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下

WPF 簡單實(shí)現(xiàn)面包屑

框架使用.NET4 至 .NET6;

Visual Studio 2022;

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

  • Button 做首頁按鈕,當(dāng)點(diǎn)擊時(shí)回到首頁。
  • ItemsControl 做面包屑 Item 展示,DataTemplate -> Hyperlink > 做點(diǎn)擊時(shí)回到當(dāng)前 Item。

ListView 展示當(dāng)前 Item 的子項(xiàng),也可以換做 ListBox 控件或其他。

效果圖

實(shí)現(xiàn)代碼

1)創(chuàng)建 BreadCrumbBarExample.xaml 代碼如下:

<wd:Window?x:Class="WpfApp1.BreadCrumbBarExample"
????????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:wd="https://github.com/WPFDevelopersOrg/WPFDevelopers"
????????xmlns:local="clr-namespace:WpfApp1"
????????mc:Ignorable="d"
????????Title="BreadCrumbBarExample?-?面包屑"?Height="450"?Width="800">
????<Grid>
????????<Grid.RowDefinitions>
????????????<RowDefinition?Height="Auto"/>
????????????<RowDefinition/>
????????</Grid.RowDefinitions>
????????<Grid?Margin="0,5">
????????????<Grid.ColumnDefinitions>
????????????????<ColumnDefinition?Width="Auto"/>
????????????????<ColumnDefinition/>
????????????</Grid.ColumnDefinitions>
????????????<Button?Style="{StaticResource?PathButton}"?ToolTip="主頁"
????????????????????Click="btnHome_Click"?Cursor="Hand">
????????????????<Path?Data="M804.571?566.857v274.286q0?14.857-10.857?25.714t-25.714?10.857h-219.429v-219.429h-146.286v219.429h-219.429q-14.857?0-25.714-10.857t-10.857-25.714v-274.286q0-0.571?0.286-1.714t0.286-1.714l328.571-270.857?328.571?270.857q0.571?1.143?0.571?3.429zM932?527.429l-35.429?42.286q-4.571?5.143-12?6.286h-1.714q-7.429?0-12-4l-395.429-329.714-395.429?329.714q-6.857?4.571-13.714?4-7.429-1.143-12-6.286l-35.429-42.286q-4.571-5.714-4-13.429t6.286-12.286l410.857-342.286q18.286-14.857?43.429-14.857t43.429?14.857l139.429?116.571v-111.429q0-8?5.143-13.143t13.143-5.143h109.714q8?0?13.143?5.143t5.143?13.143v233.143l125.143?104q5.714?4.571?6.286?12.286t-4?13.429z"
??????????????????????Stretch="Uniform"?Width="15"
??????????????????????Fill="{StaticResource?PrimaryTextSolidColorBrush}"/>
????????????</Button>
????????????<ScrollViewer?HorizontalScrollBarVisibility="Auto"
??????????????????????????Grid.Column="1">
????????????????<ItemsControl?ItemsSource="{Binding?BreadCrumbBars}">
????????????????????<ItemsControl.ItemsPanel>
????????????????????????<ItemsPanelTemplate>
????????????????????????????<VirtualizingStackPanel?Orientation="Horizontal"/>
????????????????????????</ItemsPanelTemplate>
????????????????????</ItemsControl.ItemsPanel>
????????????????????<ItemsControl.ItemTemplate>
????????????????????????<DataTemplate>
????????????????????????????<TextBlock?VerticalAlignment="Center">
????????????????????????????????<Hyperlink?Click="Hyperlink_Click"
???????????????????????????????????????????Cursor="Hand">
????????????????????????????????????<Run?Text="{Binding?Name}"/>
????????????????????????????????</Hyperlink>
????????????????????????????????<Run?Text="?>?"/>
????????????????????????????</TextBlock>
????????????????????????</DataTemplate>
????????????????????</ItemsControl.ItemTemplate>
????????????????</ItemsControl>
????????????</ScrollViewer>
????????</Grid>
????????<ListView?ItemsSource="{Binding?Files}"?Grid.Row="1"
??????????????????SelectedItem="{Binding?FilesSelectedItem}"
??????????????????Name="FilesListView">
????????????<ListView.View>
????????????????<GridView>
????????????????????<GridViewColumn?Header="Name"?
????????????????????????????????????DisplayMemberBinding="{Binding?Name}"?
????????????????????????????????????Width="200"/>
????????????????</GridView>
????????????</ListView.View>
????????</ListView>
????</Grid>
</wd:Window>

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

  • BreadCrumbBars 記錄面包屑的值。
  • Files 記錄當(dāng)前的子項(xiàng)。
  • 當(dāng)點(diǎn)擊面包屑則刪除當(dāng)前至末尾的所有數(shù)據(jù) 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
{
????///?<summary>
????///?BreadCrumbBarExample.xaml?的交互邏輯
????///?</summary>
????public?partial?class?BreadCrumbBarExample?:?INotifyPropertyChanged
????{
????????private?ObservableCollection<FolderItem>?files;
????????public?ObservableCollection<FolderItem>?Files
????????{
????????????get?{?return?files;?}
????????????set?{?files?=?value;?OnPropertyChanged();?}
????????}

????????private?ObservableCollection<FolderItem>?breadCrumbBars;
????????public?ObservableCollection<FolderItem>?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<FolderItem>();
????????????Files?=?new?ObservableCollection<FolderItem>();
????????????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<FolderItem>(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<FolderItem>(array);
????????????}
????????????AddFolder(folderItem);
????????}

????????void?AddFolder(FolderItem?folderItem)
????????{
????????????try
????????????{
????????????????if?(folderItem?==?null)?return;
????????????????FilesListView.SelectedIndex?=?-1;
????????????????FilesListView.SelectedItem?=?null;
????????????????Files.Clear();
????????????????var?list?=?new?ObservableCollection<FolderItem>();
????????????????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;
????}

}

到此這篇關(guān)于基于WPF實(shí)現(xiàn)面包屑效果的示例代碼的文章就介紹到這了,更多相關(guān)WPF面包屑內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用C#實(shí)現(xiàn)讀取PDF中所有文本內(nèi)容

    使用C#實(shí)現(xiàn)讀取PDF中所有文本內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)讀取PDF中所有文本內(nèi)容,文中的示例代碼簡潔易懂,具有一定的學(xué)習(xí)價(jià)值,有需要的小伙伴可以了解下
    2024-02-02
  • C#中List和數(shù)組之間轉(zhuǎn)換的方法

    C#中List和數(shù)組之間轉(zhuǎn)換的方法

    這篇文章主要介紹了C#中List和數(shù)組之間轉(zhuǎn)換的方法,涉及比較簡單的轉(zhuǎn)換技巧,需要的朋友可以參考下
    2015-02-02
  • C#編程實(shí)現(xiàn)獲取文件夾中所有文件的文件名

    C#編程實(shí)現(xiàn)獲取文件夾中所有文件的文件名

    這篇文章主要介紹了C#編程實(shí)現(xiàn)獲取文件夾中所有文件的文件名,可實(shí)現(xiàn)獲取特定目錄下制定類型文件名稱的功能,涉及C#針對文件與目錄的遍歷、查詢等操作相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • c# 值類型實(shí)例構(gòu)造器

    c# 值類型實(shí)例構(gòu)造器

    CLR總是允許創(chuàng)建值類型的實(shí)例。另外值類型不一定需要定義構(gòu)造器,c#編譯器不會為值類型生成默認(rèn)的無參構(gòu)造器
    2012-10-10
  • Winform項(xiàng)目中TextBox控件DataBindings屬性

    Winform項(xiàng)目中TextBox控件DataBindings屬性

    這篇文章介紹了Winform項(xiàng)目中TextBox控件DataBindings屬性的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • C# 漢字轉(zhuǎn)拼音實(shí)例(支持GB2312字符集中所有漢字)

    C# 漢字轉(zhuǎn)拼音實(shí)例(支持GB2312字符集中所有漢字)

    本篇文章主要介紹了C# 漢字轉(zhuǎn)拼音實(shí)例(支持GB2312字符集中所有漢字) ,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2016-12-12
  • VMS中解協(xié)議常用方法備忘(小結(jié))

    VMS中解協(xié)議常用方法備忘(小結(jié))

    這篇文章主要介紹了VMS中解協(xié)議常用方法備忘(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • C#集合之字典的用法

    C#集合之字典的用法

    這篇文章介紹了C#集合之字典的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#中一些你可能沒用過的調(diào)試窗口的方法

    C#中一些你可能沒用過的調(diào)試窗口的方法

    其他窗口比較常用,就不介紹了,是不是有一些你沒用到的窗口呢?
    2013-05-05
  • Unity實(shí)現(xiàn)場景加載功能

    Unity實(shí)現(xiàn)場景加載功能

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)場景加載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論