翼度科技»论坛 编程开发 .net 查看内容

循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(7)

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
我们在WPF应用端的界面中,使用lepoco/wpfui 来做主要的入口框架,这个项目它的菜单内置了不少图标,我们需要在动态菜单的配置中,使用它作为图标的展示处理,本篇随笔介绍如何基于图标枚举集合进行图标的展示和选择处理。并扩展到Font-Awesome-WPF的处理进行展示和选择。
1、lepoco/wpfui 项目的图标库

lepoco/wpfui 项目的图标库来源于Fluent System Icons,项目地址是:https://github.com/microsoft/fluentui-system-icons
这些图标映射到枚举对象 SymbolRegular 和 SymbolFilled,一个是常规的,一个是填充的图标,如下枚举对象所示。

 图标主要通过前面的名称来区分展示的,图标列表主要展示效果如下所示。

我们可以通过代码把这些枚举内容全部加载到列表中进行使用。
  1. var iconList = EnumHelper.GetMemberKeyValue<<strong>SymbolRegular</strong>>();
  2. foreach (var icon in iconList)
  3. {
  4.     this.AllItems.Add(new CListItem(icon.Key, icon.Value.ToString()));
  5. }
复制代码
我们为了处理这些图标内容,需要按照MVVM的设计模式,设计相关的视图模型和视图界面,由于图标比较多,测试一次性展示的时候太过耗时,因此把它们分页处理,实际运行的界面效果如下所示。
1)图标列表选择界面

 2)图标选择后的展示界面
我们一般在动态菜单设置页面中用到图标的选择处理,如下界面所示。

 为了有效的对图标进行分页展示,视图模型需要包含一些分页所需的对象信息,如下代码所示。
  1.     /// <summary>
  2.     /// SymbolRegular 的图标查询视图模型
  3.     /// </summary>
  4.     public partial class<strong> SymbolRegularListViewModel</strong> : BaseViewModel
  5.     {
  6.         /// <summary>
  7.         /// 选择的图表项目
  8.         /// </summary>
  9.         [ObservableProperty]
  10.         private CListItem selectedItem = new();
  11.         /// <summary>
  12.         /// 符合条件的图标列表
  13.         /// </summary>
  14.         [ObservableProperty]
  15.         private List<CListItem> iconItems = new();
  16.         /// <summary>
  17.         /// 所有图标
  18.         /// </summary>
  19.         [ObservableProperty]
  20.         private List<CListItem> allItems = new();
  21.         /// <summary>
  22.         /// 分页对象
  23.         /// </summary>
  24.         [ObservableProperty]
  25.         private PagingData pagerInfo = new PagingData() { CurrentPageIndex = 1, PageSize =60 };
复制代码
由于图标不用访问数据库,因此在枚举读取初始化后存储所有的图标集合,并以集合为基础进行图标名称的检索及排序处理。
在查询处理的时候,我们需要把分页的页码和页面大小等信息转换为记录数的跳转及获取变量,如下所示。
  1. /// <summary>
  2. /// 转换下分页信息,为查询对象的属性
  3. /// </summary>
  4. protected virtual void ConvertPagingInfo()
  5. {
  6.     //根据传入的分页信息构建查询记录数和位置
  7.     this.SkipCount = (this.PagerInfo.CurrentPageIndex - 1) * this.PagerInfo.PageSize;
  8.     this.MaxResultCount = this.PagerInfo.PageSize;
  9. }
复制代码
查询处理的代码如下所示(在视图模型上处理代码)
  1. /// <summary>
  2. /// 触发查询处理命令
  3. /// </summary>
  4. /// <returns></returns>
  5. [RelayCommand]
  6. public virtual void Search()
  7. {
  8.     //切换第一页
  9.     this.PagerInfo.CurrentPageIndex = 1;
  10.     //查询更新
  11.     GetData();
  12. }
  13. /// <summary>
  14. /// 根据分页和查询条件查询,请求数据
  15. /// </summary>
  16. /// <returns></returns>
  17. public virtual void GetData()
  18. {
  19.     //转换下分页信息
  20.     ConvertPagingInfo();
  21.     if (this.Filter.IsNullOrEmpty())
  22.     {
  23.         this.IconItems = AllItems.Skip(this.SkipCount).Take(this.MaxResultCount).ToList();
  24.         this.PagerInfo.RecordCount = this.AllItems.Count;
  25.     }
  26.     else
  27.     {
  28.         this.IconItems = AllItems.Where(s => s.Text.Contains(this.Filter, StringComparison.OrdinalIgnoreCase)).Skip(this.SkipCount).Take(this.MaxResultCount).ToList();
  29.         this.PagerInfo.RecordCount = AllItems.Where(s => s.Text.Contains(this.Filter, StringComparison.OrdinalIgnoreCase)).Count();
  30.     }
  31. }
复制代码
选择图标的列表展示界面,遵循MVVM的视图界面代码规范,标准化处理即可,对查询搜索框的处理响应进行查询处理。
  1. /// <summary>
  2. /// SymbolRegularSelectPage.xaml 交互逻辑
  3. /// </summary>
  4. public partial class <strong>SymbolRegularSelectPage</strong> : INavigableView<<strong>SymbolRegularListViewModel</strong>>
  5. {
  6.     /// <summary>
  7.     /// 视图模型对象
  8.     /// </summary>
  9.     public SymbolRegularListViewModel ViewModel { get; }  
  10.     /// <summary>
  11.     /// 构造函数
  12.     /// </summary>
  13.     /// <param name="viewModel">视图模型对象</param>
  14.     public SymbolRegularSelectPage(SymbolRegularListViewModel viewModel)
  15.     {
  16.         ViewModel = viewModel;
  17.         DataContext = this;
  18.         InitializeComponent();
  19.     }
  20.     /// <summary>
  21.     /// 过滤查询事件
  22.     /// </summary>
  23.     private void SearchBar_OnSearchStarted(object sender, HandyControl.Data.FunctionEventArgs<string> e)
  24.     {
  25.         <strong>this</strong><strong>.ViewModel.Search();</strong>
  26.     }
复制代码
2、对图标使用ItemsControl控件进行控制输出

图标是一个集合对象,因此我们如果需要按照我们格式进行展示,可以使用ItemsControl来进行处理。
ItemsControl可以通过控制 ItemsControl.ItemsPanel 的ItemsPanelTemplate模板进行控制布局面板,可以通过控制 ItemsControl.Template 的ControlTemplate来控制输出格式的总模板,可以通过控制 ItemsControl.ItemTemplate的DataTemplate来控制输出每个项目的模板,这个控件ItemsControl提供了很灵活的控制模板处理。如下XAML界面代码所示。
  1. <ItemsControl
  2.     x:Name="chkIcons"
  3.     Height="580"
  4.     HorizontalContentAlignment="Left"
  5.     ItemsSource="{Binding ViewModel.IconItems}"
  6.     ScrollViewer.CanContentScroll="True"
  7.     VirtualizingStackPanel.IsVirtualizing="true"
  8.     VirtualizingStackPanel.VirtualizationMode="Standard">
  9.     <ItemsControl.ItemsPanel>
  10.         <ItemsPanelTemplate>
  11. <WrapPanel
  12.     Grid.Column="0"
  13.     Margin="10,0"
  14.     VerticalAlignment="Center"
  15.     Orientation="Horizontal">
  16.     <TextBlock
  17.         HorizontalAlignment="Left"
  18.         VerticalAlignment="Center"
  19.         Text="当前选择:" />
  20.     <ui:SymbolIcon
  21.         FontSize="32"
  22.         Foreground="CornflowerBlue"
  23.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  24.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  25.     <TextBlock
  26.         Margin="10,0"
  27.         HorizontalAlignment="Left"
  28.         VerticalAlignment="Center"
  29.         Foreground="Blue"
  30.         Text="{Binding ViewModel.SelectedItem.Text}" />
  31. </WrapPanel><UniformGrid
  32. <WrapPanel
  33.     Grid.Column="0"
  34.     Margin="10,0"
  35.     VerticalAlignment="Center"
  36.     Orientation="Horizontal">
  37.     <TextBlock
  38.         HorizontalAlignment="Left"
  39.         VerticalAlignment="Center"
  40.         Text="当前选择:" />
  41.     <ui:SymbolIcon
  42.         FontSize="32"
  43.         Foreground="CornflowerBlue"
  44.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  45.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  46.     <TextBlock
  47.         Margin="10,0"
  48.         HorizontalAlignment="Left"
  49.         VerticalAlignment="Center"
  50.         Foreground="Blue"
  51.         Text="{Binding ViewModel.SelectedItem.Text}" />
  52. </WrapPanel>    HorizontalAlignment="Left"
  53. <WrapPanel
  54.     Grid.Column="0"
  55.     Margin="10,0"
  56.     VerticalAlignment="Center"
  57.     Orientation="Horizontal">
  58.     <TextBlock
  59.         HorizontalAlignment="Left"
  60.         VerticalAlignment="Center"
  61.         Text="当前选择:" />
  62.     <ui:SymbolIcon
  63.         FontSize="32"
  64.         Foreground="CornflowerBlue"
  65.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  66.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  67.     <TextBlock
  68.         Margin="10,0"
  69.         HorizontalAlignment="Left"
  70.         VerticalAlignment="Center"
  71.         Foreground="Blue"
  72.         Text="{Binding ViewModel.SelectedItem.Text}" />
  73. </WrapPanel>    VerticalAlignment="Top"
  74. <WrapPanel
  75.     Grid.Column="0"
  76.     Margin="10,0"
  77.     VerticalAlignment="Center"
  78.     Orientation="Horizontal">
  79.     <TextBlock
  80.         HorizontalAlignment="Left"
  81.         VerticalAlignment="Center"
  82.         Text="当前选择:" />
  83.     <ui:SymbolIcon
  84.         FontSize="32"
  85.         Foreground="CornflowerBlue"
  86.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  87.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  88.     <TextBlock
  89.         Margin="10,0"
  90.         HorizontalAlignment="Left"
  91.         VerticalAlignment="Center"
  92.         Foreground="Blue"
  93.         Text="{Binding ViewModel.SelectedItem.Text}" />
  94. </WrapPanel>    Columns="10" />
  95.         </ItemsPanelTemplate>
  96.     </ItemsControl.ItemsPanel>
  97.     <ItemsControl.ItemTemplate>
  98.         <DataTemplate>
  99. <WrapPanel
  100.     Grid.Column="0"
  101.     Margin="10,0"
  102.     VerticalAlignment="Center"
  103.     Orientation="Horizontal">
  104.     <TextBlock
  105.         HorizontalAlignment="Left"
  106.         VerticalAlignment="Center"
  107.         Text="当前选择:" />
  108.     <ui:SymbolIcon
  109.         FontSize="32"
  110.         Foreground="CornflowerBlue"
  111.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  112.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  113.     <TextBlock
  114.         Margin="10,0"
  115.         HorizontalAlignment="Left"
  116.         VerticalAlignment="Center"
  117.         Foreground="Blue"
  118.         Text="{Binding ViewModel.SelectedItem.Text}" />
  119. </WrapPanel><Button
  120. <WrapPanel
  121.     Grid.Column="0"
  122.     Margin="10,0"
  123.     VerticalAlignment="Center"
  124.     Orientation="Horizontal">
  125.     <TextBlock
  126.         HorizontalAlignment="Left"
  127.         VerticalAlignment="Center"
  128.         Text="当前选择:" />
  129.     <ui:SymbolIcon
  130.         FontSize="32"
  131.         Foreground="CornflowerBlue"
  132.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  133.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  134.     <TextBlock
  135.         Margin="10,0"
  136.         HorizontalAlignment="Left"
  137.         VerticalAlignment="Center"
  138.         Foreground="Blue"
  139.         Text="{Binding ViewModel.SelectedItem.Text}" />
  140. </WrapPanel>    Width="80"
  141. <WrapPanel
  142.     Grid.Column="0"
  143.     Margin="10,0"
  144.     VerticalAlignment="Center"
  145.     Orientation="Horizontal">
  146.     <TextBlock
  147.         HorizontalAlignment="Left"
  148.         VerticalAlignment="Center"
  149.         Text="当前选择:" />
  150.     <ui:SymbolIcon
  151.         FontSize="32"
  152.         Foreground="CornflowerBlue"
  153.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  154.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  155.     <TextBlock
  156.         Margin="10,0"
  157.         HorizontalAlignment="Left"
  158.         VerticalAlignment="Center"
  159.         Foreground="Blue"
  160.         Text="{Binding ViewModel.SelectedItem.Text}" />
  161. </WrapPanel>    Height="80"
  162. <WrapPanel
  163.     Grid.Column="0"
  164.     Margin="10,0"
  165.     VerticalAlignment="Center"
  166.     Orientation="Horizontal">
  167.     <TextBlock
  168.         HorizontalAlignment="Left"
  169.         VerticalAlignment="Center"
  170.         Text="当前选择:" />
  171.     <ui:SymbolIcon
  172.         FontSize="32"
  173.         Foreground="CornflowerBlue"
  174.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  175.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  176.     <TextBlock
  177.         Margin="10,0"
  178.         HorizontalAlignment="Left"
  179.         VerticalAlignment="Center"
  180.         Foreground="Blue"
  181.         Text="{Binding ViewModel.SelectedItem.Text}" />
  182. </WrapPanel>    Margin="8,8"
  183. <WrapPanel
  184.     Grid.Column="0"
  185.     Margin="10,0"
  186.     VerticalAlignment="Center"
  187.     Orientation="Horizontal">
  188.     <TextBlock
  189.         HorizontalAlignment="Left"
  190.         VerticalAlignment="Center"
  191.         Text="当前选择:" />
  192.     <ui:SymbolIcon
  193.         FontSize="32"
  194.         Foreground="CornflowerBlue"
  195.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  196.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  197.     <TextBlock
  198.         Margin="10,0"
  199.         HorizontalAlignment="Left"
  200.         VerticalAlignment="Center"
  201.         Foreground="Blue"
  202.         Text="{Binding ViewModel.SelectedItem.Text}" />
  203. </WrapPanel>    Padding="0"
  204. <WrapPanel
  205.     Grid.Column="0"
  206.     Margin="10,0"
  207.     VerticalAlignment="Center"
  208.     Orientation="Horizontal">
  209.     <TextBlock
  210.         HorizontalAlignment="Left"
  211.         VerticalAlignment="Center"
  212.         Text="当前选择:" />
  213.     <ui:SymbolIcon
  214.         FontSize="32"
  215.         Foreground="CornflowerBlue"
  216.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  217.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  218.     <TextBlock
  219.         Margin="10,0"
  220.         HorizontalAlignment="Left"
  221.         VerticalAlignment="Center"
  222.         Foreground="Blue"
  223.         Text="{Binding ViewModel.SelectedItem.Text}" />
  224. </WrapPanel>    HorizontalAlignment="Stretch"
  225. <WrapPanel
  226.     Grid.Column="0"
  227.     Margin="10,0"
  228.     VerticalAlignment="Center"
  229.     Orientation="Horizontal">
  230.     <TextBlock
  231.         HorizontalAlignment="Left"
  232.         VerticalAlignment="Center"
  233.         Text="当前选择:" />
  234.     <ui:SymbolIcon
  235.         FontSize="32"
  236.         Foreground="CornflowerBlue"
  237.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  238.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  239.     <TextBlock
  240.         Margin="10,0"
  241.         HorizontalAlignment="Left"
  242.         VerticalAlignment="Center"
  243.         Foreground="Blue"
  244.         Text="{Binding ViewModel.SelectedItem.Text}" />
  245. </WrapPanel>    VerticalAlignment="Stretch"
  246. <WrapPanel
  247.     Grid.Column="0"
  248.     Margin="10,0"
  249.     VerticalAlignment="Center"
  250.     Orientation="Horizontal">
  251.     <TextBlock
  252.         HorizontalAlignment="Left"
  253.         VerticalAlignment="Center"
  254.         Text="当前选择:" />
  255.     <ui:SymbolIcon
  256.         FontSize="32"
  257.         Foreground="CornflowerBlue"
  258.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  259.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  260.     <TextBlock
  261.         Margin="10,0"
  262.         HorizontalAlignment="Left"
  263.         VerticalAlignment="Center"
  264.         Foreground="Blue"
  265.         Text="{Binding ViewModel.SelectedItem.Text}" />
  266. </WrapPanel>    Click="Button_Click"
  267. <WrapPanel
  268.     Grid.Column="0"
  269.     Margin="10,0"
  270.     VerticalAlignment="Center"
  271.     Orientation="Horizontal">
  272.     <TextBlock
  273.         HorizontalAlignment="Left"
  274.         VerticalAlignment="Center"
  275.         Text="当前选择:" />
  276.     <ui:SymbolIcon
  277.         FontSize="32"
  278.         Foreground="CornflowerBlue"
  279.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  280.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  281.     <TextBlock
  282.         Margin="10,0"
  283.         HorizontalAlignment="Left"
  284.         VerticalAlignment="Center"
  285.         Foreground="Blue"
  286.         Text="{Binding ViewModel.SelectedItem.Text}" />
  287. </WrapPanel>    FontSize="32"
  288. <WrapPanel
  289.     Grid.Column="0"
  290.     Margin="10,0"
  291.     VerticalAlignment="Center"
  292.     Orientation="Horizontal">
  293.     <TextBlock
  294.         HorizontalAlignment="Left"
  295.         VerticalAlignment="Center"
  296.         Text="当前选择:" />
  297.     <ui:SymbolIcon
  298.         FontSize="32"
  299.         Foreground="CornflowerBlue"
  300.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  301.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  302.     <TextBlock
  303.         Margin="10,0"
  304.         HorizontalAlignment="Left"
  305.         VerticalAlignment="Center"
  306.         Foreground="Blue"
  307.         Text="{Binding ViewModel.SelectedItem.Text}" />
  308. </WrapPanel>    MouseDoubleClick="Button_MouseDoubleClick"
  309. <WrapPanel
  310.     Grid.Column="0"
  311.     Margin="10,0"
  312.     VerticalAlignment="Center"
  313.     Orientation="Horizontal">
  314.     <TextBlock
  315.         HorizontalAlignment="Left"
  316.         VerticalAlignment="Center"
  317.         Text="当前选择:" />
  318.     <ui:SymbolIcon
  319.         FontSize="32"
  320.         Foreground="CornflowerBlue"
  321.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  322.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  323.     <TextBlock
  324.         Margin="10,0"
  325.         HorizontalAlignment="Left"
  326.         VerticalAlignment="Center"
  327.         Foreground="Blue"
  328.         Text="{Binding ViewModel.SelectedItem.Text}" />
  329. </WrapPanel>    Tag="{Binding}"
  330. <WrapPanel
  331.     Grid.Column="0"
  332.     Margin="10,0"
  333.     VerticalAlignment="Center"
  334.     Orientation="Horizontal">
  335.     <TextBlock
  336.         HorizontalAlignment="Left"
  337.         VerticalAlignment="Center"
  338.         Text="当前选择:" />
  339.     <ui:SymbolIcon
  340.         FontSize="32"
  341.         Foreground="CornflowerBlue"
  342.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  343.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  344.     <TextBlock
  345.         Margin="10,0"
  346.         HorizontalAlignment="Left"
  347.         VerticalAlignment="Center"
  348.         Foreground="Blue"
  349.         Text="{Binding ViewModel.SelectedItem.Text}" />
  350. </WrapPanel>    ToolTip="{Binding Text, Mode=OneTime}"
  351. <WrapPanel
  352.     Grid.Column="0"
  353.     Margin="10,0"
  354.     VerticalAlignment="Center"
  355.     Orientation="Horizontal">
  356.     <TextBlock
  357.         HorizontalAlignment="Left"
  358.         VerticalAlignment="Center"
  359.         Text="当前选择:" />
  360.     <ui:SymbolIcon
  361.         FontSize="32"
  362.         Foreground="CornflowerBlue"
  363.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  364.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  365.     <TextBlock
  366.         Margin="10,0"
  367.         HorizontalAlignment="Left"
  368.         VerticalAlignment="Center"
  369.         Foreground="Blue"
  370.         Text="{Binding ViewModel.SelectedItem.Text}" />
  371. </WrapPanel>    ToolTipService.InitialShowDelay="240">
  372. <WrapPanel
  373.     Grid.Column="0"
  374.     Margin="10,0"
  375.     VerticalAlignment="Center"
  376.     Orientation="Horizontal">
  377.     <TextBlock
  378.         HorizontalAlignment="Left"
  379.         VerticalAlignment="Center"
  380.         Text="当前选择:" />
  381.     <ui:SymbolIcon
  382.         FontSize="32"
  383.         Foreground="CornflowerBlue"
  384.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  385.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  386.     <TextBlock
  387.         Margin="10,0"
  388.         HorizontalAlignment="Left"
  389.         VerticalAlignment="Center"
  390.         Foreground="Blue"
  391.         Text="{Binding ViewModel.SelectedItem.Text}" />
  392. </WrapPanel>    <ui:SymbolIcon
  393. <WrapPanel
  394.     Grid.Column="0"
  395.     Margin="10,0"
  396.     VerticalAlignment="Center"
  397.     Orientation="Horizontal">
  398.     <TextBlock
  399.         HorizontalAlignment="Left"
  400.         VerticalAlignment="Center"
  401.         Text="当前选择:" />
  402.     <ui:SymbolIcon
  403.         FontSize="32"
  404.         Foreground="CornflowerBlue"
  405.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  406.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  407.     <TextBlock
  408.         Margin="10,0"
  409.         HorizontalAlignment="Left"
  410.         VerticalAlignment="Center"
  411.         Foreground="Blue"
  412.         Text="{Binding ViewModel.SelectedItem.Text}" />
  413. </WrapPanel>        FontSize="48"
  414. <WrapPanel
  415.     Grid.Column="0"
  416.     Margin="10,0"
  417.     VerticalAlignment="Center"
  418.     Orientation="Horizontal">
  419.     <TextBlock
  420.         HorizontalAlignment="Left"
  421.         VerticalAlignment="Center"
  422.         Text="当前选择:" />
  423.     <ui:SymbolIcon
  424.         FontSize="32"
  425.         Foreground="CornflowerBlue"
  426.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  427.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  428.     <TextBlock
  429.         Margin="10,0"
  430.         HorizontalAlignment="Left"
  431.         VerticalAlignment="Center"
  432.         Foreground="Blue"
  433.         Text="{Binding ViewModel.SelectedItem.Text}" />
  434. </WrapPanel>        Foreground="CornflowerBlue"
  435. <WrapPanel
  436.     Grid.Column="0"
  437.     Margin="10,0"
  438.     VerticalAlignment="Center"
  439.     Orientation="Horizontal">
  440.     <TextBlock
  441.         HorizontalAlignment="Left"
  442.         VerticalAlignment="Center"
  443.         Text="当前选择:" />
  444.     <ui:SymbolIcon
  445.         FontSize="32"
  446.         Foreground="CornflowerBlue"
  447.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  448.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  449.     <TextBlock
  450.         Margin="10,0"
  451.         HorizontalAlignment="Left"
  452.         VerticalAlignment="Center"
  453.         Foreground="Blue"
  454.         Text="{Binding ViewModel.SelectedItem.Text}" />
  455. </WrapPanel>        Symbol="{Binding Text}"
  456. <WrapPanel
  457.     Grid.Column="0"
  458.     Margin="10,0"
  459.     VerticalAlignment="Center"
  460.     Orientation="Horizontal">
  461.     <TextBlock
  462.         HorizontalAlignment="Left"
  463.         VerticalAlignment="Center"
  464.         Text="当前选择:" />
  465.     <ui:SymbolIcon
  466.         FontSize="32"
  467.         Foreground="CornflowerBlue"
  468.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  469.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  470.     <TextBlock
  471.         Margin="10,0"
  472.         HorizontalAlignment="Left"
  473.         VerticalAlignment="Center"
  474.         Foreground="Blue"
  475.         Text="{Binding ViewModel.SelectedItem.Text}" />
  476. </WrapPanel>        Tag="{Binding}"
  477. <WrapPanel
  478.     Grid.Column="0"
  479.     Margin="10,0"
  480.     VerticalAlignment="Center"
  481.     Orientation="Horizontal">
  482.     <TextBlock
  483.         HorizontalAlignment="Left"
  484.         VerticalAlignment="Center"
  485.         Text="当前选择:" />
  486.     <ui:SymbolIcon
  487.         FontSize="32"
  488.         Foreground="CornflowerBlue"
  489.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  490.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  491.     <TextBlock
  492.         Margin="10,0"
  493.         HorizontalAlignment="Left"
  494.         VerticalAlignment="Center"
  495.         Foreground="Blue"
  496.         Text="{Binding ViewModel.SelectedItem.Text}" />
  497. </WrapPanel>        ToolTip="{Binding Text}" />
  498. <WrapPanel
  499.     Grid.Column="0"
  500.     Margin="10,0"
  501.     VerticalAlignment="Center"
  502.     Orientation="Horizontal">
  503.     <TextBlock
  504.         HorizontalAlignment="Left"
  505.         VerticalAlignment="Center"
  506.         Text="当前选择:" />
  507.     <ui:SymbolIcon
  508.         FontSize="32"
  509.         Foreground="CornflowerBlue"
  510.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  511.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  512.     <TextBlock
  513.         Margin="10,0"
  514.         HorizontalAlignment="Left"
  515.         VerticalAlignment="Center"
  516.         Foreground="Blue"
  517.         Text="{Binding ViewModel.SelectedItem.Text}" />
  518. </WrapPanel></Button>
  519.         </DataTemplate>
  520.     </ItemsControl.ItemTemplate>
  521.     <ItemsControl.Template>
  522.         <ControlTemplate TargetType="ItemsControl">
  523. <WrapPanel
  524.     Grid.Column="0"
  525.     Margin="10,0"
  526.     VerticalAlignment="Center"
  527.     Orientation="Horizontal">
  528.     <TextBlock
  529.         HorizontalAlignment="Left"
  530.         VerticalAlignment="Center"
  531.         Text="当前选择:" />
  532.     <ui:SymbolIcon
  533.         FontSize="32"
  534.         Foreground="CornflowerBlue"
  535.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  536.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  537.     <TextBlock
  538.         Margin="10,0"
  539.         HorizontalAlignment="Left"
  540.         VerticalAlignment="Center"
  541.         Foreground="Blue"
  542.         Text="{Binding ViewModel.SelectedItem.Text}" />
  543. </WrapPanel><ScrollViewer
  544. <WrapPanel
  545.     Grid.Column="0"
  546.     Margin="10,0"
  547.     VerticalAlignment="Center"
  548.     Orientation="Horizontal">
  549.     <TextBlock
  550.         HorizontalAlignment="Left"
  551.         VerticalAlignment="Center"
  552.         Text="当前选择:" />
  553.     <ui:SymbolIcon
  554.         FontSize="32"
  555.         Foreground="CornflowerBlue"
  556.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  557.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  558.     <TextBlock
  559.         Margin="10,0"
  560.         HorizontalAlignment="Left"
  561.         VerticalAlignment="Center"
  562.         Foreground="Blue"
  563.         Text="{Binding ViewModel.SelectedItem.Text}" />
  564. </WrapPanel>    Width="Auto"
  565. <WrapPanel
  566.     Grid.Column="0"
  567.     Margin="10,0"
  568.     VerticalAlignment="Center"
  569.     Orientation="Horizontal">
  570.     <TextBlock
  571.         HorizontalAlignment="Left"
  572.         VerticalAlignment="Center"
  573.         Text="当前选择:" />
  574.     <ui:SymbolIcon
  575.         FontSize="32"
  576.         Foreground="CornflowerBlue"
  577.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  578.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  579.     <TextBlock
  580.         Margin="10,0"
  581.         HorizontalAlignment="Left"
  582.         VerticalAlignment="Center"
  583.         Foreground="Blue"
  584.         Text="{Binding ViewModel.SelectedItem.Text}" />
  585. </WrapPanel>    CanContentScroll="True"
  586. <WrapPanel
  587.     Grid.Column="0"
  588.     Margin="10,0"
  589.     VerticalAlignment="Center"
  590.     Orientation="Horizontal">
  591.     <TextBlock
  592.         HorizontalAlignment="Left"
  593.         VerticalAlignment="Center"
  594.         Text="当前选择:" />
  595.     <ui:SymbolIcon
  596.         FontSize="32"
  597.         Foreground="CornflowerBlue"
  598.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  599.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  600.     <TextBlock
  601.         Margin="10,0"
  602.         HorizontalAlignment="Left"
  603.         VerticalAlignment="Center"
  604.         Foreground="Blue"
  605.         Text="{Binding ViewModel.SelectedItem.Text}" />
  606. </WrapPanel>    VerticalScrollBarVisibility="Visible">
  607. <WrapPanel
  608.     Grid.Column="0"
  609.     Margin="10,0"
  610.     VerticalAlignment="Center"
  611.     Orientation="Horizontal">
  612.     <TextBlock
  613.         HorizontalAlignment="Left"
  614.         VerticalAlignment="Center"
  615.         Text="当前选择:" />
  616.     <ui:SymbolIcon
  617.         FontSize="32"
  618.         Foreground="CornflowerBlue"
  619.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  620.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  621.     <TextBlock
  622.         Margin="10,0"
  623.         HorizontalAlignment="Left"
  624.         VerticalAlignment="Center"
  625.         Foreground="Blue"
  626.         Text="{Binding ViewModel.SelectedItem.Text}" />
  627. </WrapPanel>    <ItemsPresenter />
  628. <WrapPanel
  629.     Grid.Column="0"
  630.     Margin="10,0"
  631.     VerticalAlignment="Center"
  632.     Orientation="Horizontal">
  633.     <TextBlock
  634.         HorizontalAlignment="Left"
  635.         VerticalAlignment="Center"
  636.         Text="当前选择:" />
  637.     <ui:SymbolIcon
  638.         FontSize="32"
  639.         Foreground="CornflowerBlue"
  640.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  641.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  642.     <TextBlock
  643.         Margin="10,0"
  644.         HorizontalAlignment="Left"
  645.         VerticalAlignment="Center"
  646.         Foreground="Blue"
  647.         Text="{Binding ViewModel.SelectedItem.Text}" />
  648. </WrapPanel></ScrollViewer>
  649.         </ControlTemplate>
  650.     </ItemsControl.Template>
  651. </ItemsControl>
复制代码
展示界面效果如下所示

当然这里面还有分页的界面代码,使用的是HandyControl的分页控件处理。
  1. <hc:Pagination
  2.     DataCountPerPage="{Binding ViewModel.PagerInfo.PageSize}"
  3.     IsJumpEnabled="True"
  4.     MaxPageCount="{Binding ViewModel.PagerInfo.MaxPageCount}"
  5.     MaxPageInterval="5"
  6.     PageIndex="{Binding ViewModel.PagerInfo.CurrentPageIndex, UpdateSourceTrigger=PropertyChanged}">
  7.     <hc:Interaction.Triggers>
  8.         <hc:EventTrigger EventName="PageUpdated">
  9. <WrapPanel
  10.     Grid.Column="0"
  11.     Margin="10,0"
  12.     VerticalAlignment="Center"
  13.     Orientation="Horizontal">
  14.     <TextBlock
  15.         HorizontalAlignment="Left"
  16.         VerticalAlignment="Center"
  17.         Text="当前选择:" />
  18.     <ui:SymbolIcon
  19.         FontSize="32"
  20.         Foreground="CornflowerBlue"
  21.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  22.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  23.     <TextBlock
  24.         Margin="10,0"
  25.         HorizontalAlignment="Left"
  26.         VerticalAlignment="Center"
  27.         Foreground="Blue"
  28.         Text="{Binding ViewModel.SelectedItem.Text}" />
  29. </WrapPanel><hc:EventToCommand Command="{Binding ViewModel.PageUpdatedCommand}" PassEventArgsToCommand="True" />
  30.         </hc:EventTrigger>
  31.     </hc:Interaction.Triggers>
  32. </hc:Pagination>
复制代码
而对每项的选择,我们单击选中,双击选中并返回处理,代码逻辑如下所示。
  1. private void Button_Click(object sender, RoutedEventArgs e)
  2. {
  3.     var button = (Button)sender;
  4.     if (button != null)
  5.     {
  6.         if (button.Tag is CListItem item)
  7.         {
  8. <WrapPanel
  9.     Grid.Column="0"
  10.     Margin="10,0"
  11.     VerticalAlignment="Center"
  12.     Orientation="Horizontal">
  13.     <TextBlock
  14.         HorizontalAlignment="Left"
  15.         VerticalAlignment="Center"
  16.         Text="当前选择:" />
  17.     <ui:SymbolIcon
  18.         FontSize="32"
  19.         Foreground="CornflowerBlue"
  20.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  21.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  22.     <TextBlock
  23.         Margin="10,0"
  24.         HorizontalAlignment="Left"
  25.         VerticalAlignment="Center"
  26.         Foreground="Blue"
  27.         Text="{Binding ViewModel.SelectedItem.Text}" />
  28. </WrapPanel>this.ViewModel.SelectedItem = item;
  29.         }
  30.     }
  31. }
  32. private void Button_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
  33. {
  34.     var button = (Button)sender;
  35.     if (button != null)
  36.     {
  37.         if (button.Tag is CListItem item)
  38.         {
  39. <WrapPanel
  40.     Grid.Column="0"
  41.     Margin="10,0"
  42.     VerticalAlignment="Center"
  43.     Orientation="Horizontal">
  44.     <TextBlock
  45.         HorizontalAlignment="Left"
  46.         VerticalAlignment="Center"
  47.         Text="当前选择:" />
  48.     <ui:SymbolIcon
  49.         FontSize="32"
  50.         Foreground="CornflowerBlue"
  51.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  52.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  53.     <TextBlock
  54.         Margin="10,0"
  55.         HorizontalAlignment="Left"
  56.         VerticalAlignment="Center"
  57.         Foreground="Blue"
  58.         Text="{Binding ViewModel.SelectedItem.Text}" />
  59. </WrapPanel>this.ViewModel.SelectedItem = item;
  60. <WrapPanel
  61.     Grid.Column="0"
  62.     Margin="10,0"
  63.     VerticalAlignment="Center"
  64.     Orientation="Horizontal">
  65.     <TextBlock
  66.         HorizontalAlignment="Left"
  67.         VerticalAlignment="Center"
  68.         Text="当前选择:" />
  69.     <ui:SymbolIcon
  70.         FontSize="32"
  71.         Foreground="CornflowerBlue"
  72.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  73.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  74.     <TextBlock
  75.         Margin="10,0"
  76.         HorizontalAlignment="Left"
  77.         VerticalAlignment="Center"
  78.         Foreground="Blue"
  79.         Text="{Binding ViewModel.SelectedItem.Text}" />
  80. </WrapPanel>this.<strong>DialogResult</strong> = true;
  81.         }
  82.     }
  83. }
复制代码
而选择的信息展示,我们可以通过一个面板来组合展示相关图标名称和图标效果即可。
  1. <WrapPanel
  2.     Grid.Column="0"
  3.     Margin="10,0"
  4.     VerticalAlignment="Center"
  5.     Orientation="Horizontal">
  6.     <TextBlock
  7.         HorizontalAlignment="Left"
  8.         VerticalAlignment="Center"
  9.         Text="当前选择:" />
  10.     <ui:SymbolIcon
  11.         FontSize="32"
  12.         Foreground="CornflowerBlue"
  13.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  14.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  15.     <TextBlock
  16.         Margin="10,0"
  17.         HorizontalAlignment="Left"
  18.         VerticalAlignment="Center"
  19.         Foreground="Blue"
  20.         Text="{Binding ViewModel.SelectedItem.Text}" />
  21. </WrapPanel>
复制代码
确认选择后返回的内容展示,我们也是使用类似的方式处理界面的

红色框的界面XAML代码如下所示。
  1. <WrapPanel
  2.     Grid.Column="0"
  3.     Margin="10,0"
  4.     VerticalAlignment="Center"
  5.     Orientation="Horizontal">
  6.     <TextBlock
  7.         HorizontalAlignment="Left"
  8.         VerticalAlignment="Center"
  9.         Text="当前选择:" />
  10.     <ui:SymbolIcon
  11.         FontSize="32"
  12.         Foreground="CornflowerBlue"
  13.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  14.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  15.     <TextBlock
  16.         Margin="10,0"
  17.         HorizontalAlignment="Left"
  18.         VerticalAlignment="Center"
  19.         Foreground="Blue"
  20.         Text="{Binding ViewModel.SelectedItem.Text}" />
  21. </WrapPanel><WrapPanel
  22.     Grid.Column="0"
  23.     Margin="10,0"
  24.     VerticalAlignment="Center"
  25.     Orientation="Horizontal">
  26.     <TextBlock
  27.         HorizontalAlignment="Left"
  28.         VerticalAlignment="Center"
  29.         Text="当前选择:" />
  30.     <ui:SymbolIcon
  31.         FontSize="32"
  32.         Foreground="CornflowerBlue"
  33.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  34.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  35.     <TextBlock
  36.         Margin="10,0"
  37.         HorizontalAlignment="Left"
  38.         VerticalAlignment="Center"
  39.         Foreground="Blue"
  40.         Text="{Binding ViewModel.SelectedItem.Text}" />
  41. </WrapPanel>
复制代码
后面就是存储处理,按照窗口界面弹出,并存储对象属性即可。
3、扩展到Font-Awesome-WPF的处理进行展示和选择

在WPF中使用Font-Awesome-WPF 图标组件的很多,它的项目地址:https://github.com/charri/Font-Awesome-WPF/blob/master/README-WPF.md
我们也可以用类似的方式来整合这个图标组件到项目中进行使用。
首先在项目的Nugget上添加安装FontAwesome.WPF组件。

 或者通过命令进行安装
  1. PM> Install-Package FontAwesome.WPF
复制代码
在使用的XAML中添加对应的命名空间。
  1. xmlns:fa="http://schemas.fontawesome.io/icons/"
复制代码
这个图标的组件使用比较简单如下代码所示。
  1. [/code]和前面的图标组件处理类似,同样需要处理图标枚举到具体图标列表展示的处理过程,图标选择界面运行效果如下所示,由于图标不是很多,所以一次性加载了。
  2. [align=center][/align]
  3.  我们先创建MVVM的视图模型对象,如下所示代码。
  4. [code]/// /// FontAwesome.WPF的图标查询视图模型/// public partial class FontAwesomeListViewModel : BaseViewModel{    [ObservableProperty]    private CListItem selectedItem = new();    ///     /// 符合条件的图标列表    ///     [ObservableProperty]    private List iconItems = new();    ///     /// 所有图标    ///     [ObservableProperty]    private List allItems = new();    ///     /// 构造函数    ///     public FontAwesomeListViewModel()    {        this.Title = "FontAwesome.WPF的图标";        //FontAwesomeIcon.Book = 0xf02d        var iconList = EnumHelper.GetMemberKeyValue();        foreach (var icon in iconList)        {<WrapPanel
  5.     Grid.Column="0"
  6.     Margin="10,0"
  7.     VerticalAlignment="Center"
  8.     Orientation="Horizontal">
  9.     <TextBlock
  10.         HorizontalAlignment="Left"
  11.         VerticalAlignment="Center"
  12.         Text="当前选择:" />
  13.     <ui:SymbolIcon
  14.         FontSize="32"
  15.         Foreground="CornflowerBlue"
  16.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  17.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  18.     <TextBlock
  19.         Margin="10,0"
  20.         HorizontalAlignment="Left"
  21.         VerticalAlignment="Center"
  22.         Foreground="Blue"
  23.         Text="{Binding ViewModel.SelectedItem.Text}" />
  24. </WrapPanel>this.AllItems.Add(new CListItem(icon.Key, icon.Value.ToString()));        }        ResetData();    }
复制代码
ItemsControl的对象展示类似,如下所示。
  1. <hc:Pagination
  2.     DataCountPerPage="{Binding ViewModel.PagerInfo.PageSize}"
  3.     IsJumpEnabled="True"
  4.     MaxPageCount="{Binding ViewModel.PagerInfo.MaxPageCount}"
  5.     MaxPageInterval="5"
  6.     PageIndex="{Binding ViewModel.PagerInfo.CurrentPageIndex, UpdateSourceTrigger=PropertyChanged}">
  7.     <hc:Interaction.Triggers>
  8.         <hc:EventTrigger EventName="PageUpdated">
  9. <WrapPanel
  10.     Grid.Column="0"
  11.     Margin="10,0"
  12.     VerticalAlignment="Center"
  13.     Orientation="Horizontal">
  14.     <TextBlock
  15.         HorizontalAlignment="Left"
  16.         VerticalAlignment="Center"
  17.         Text="当前选择:" />
  18.     <ui:SymbolIcon
  19.         FontSize="32"
  20.         Foreground="CornflowerBlue"
  21.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  22.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  23.     <TextBlock
  24.         Margin="10,0"
  25.         HorizontalAlignment="Left"
  26.         VerticalAlignment="Center"
  27.         Foreground="Blue"
  28.         Text="{Binding ViewModel.SelectedItem.Text}" />
  29. </WrapPanel><hc:EventToCommand Command="{Binding ViewModel.PageUpdatedCommand}" PassEventArgsToCommand="True" />
  30.         </hc:EventTrigger>
  31.     </hc:Interaction.Triggers>
  32. </hc:Pagination><hc:Pagination
  33.     DataCountPerPage="{Binding ViewModel.PagerInfo.PageSize}"
  34.     IsJumpEnabled="True"
  35.     MaxPageCount="{Binding ViewModel.PagerInfo.MaxPageCount}"
  36.     MaxPageInterval="5"
  37.     PageIndex="{Binding ViewModel.PagerInfo.CurrentPageIndex, UpdateSourceTrigger=PropertyChanged}">
  38.     <hc:Interaction.Triggers>
  39.         <hc:EventTrigger EventName="PageUpdated">
  40. <WrapPanel
  41.     Grid.Column="0"
  42.     Margin="10,0"
  43.     VerticalAlignment="Center"
  44.     Orientation="Horizontal">
  45.     <TextBlock
  46.         HorizontalAlignment="Left"
  47.         VerticalAlignment="Center"
  48.         Text="当前选择:" />
  49.     <ui:SymbolIcon
  50.         FontSize="32"
  51.         Foreground="CornflowerBlue"
  52.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  53.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  54.     <TextBlock
  55.         Margin="10,0"
  56.         HorizontalAlignment="Left"
  57.         VerticalAlignment="Center"
  58.         Foreground="Blue"
  59.         Text="{Binding ViewModel.SelectedItem.Text}" />
  60. </WrapPanel><hc:EventToCommand Command="{Binding ViewModel.PageUpdatedCommand}" PassEventArgsToCommand="True" />
  61.         </hc:EventTrigger>
  62.     </hc:Interaction.Triggers>
  63. </hc:Pagination><hc:Pagination
  64.     DataCountPerPage="{Binding ViewModel.PagerInfo.PageSize}"
  65.     IsJumpEnabled="True"
  66.     MaxPageCount="{Binding ViewModel.PagerInfo.MaxPageCount}"
  67.     MaxPageInterval="5"
  68.     PageIndex="{Binding ViewModel.PagerInfo.CurrentPageIndex, UpdateSourceTrigger=PropertyChanged}">
  69.     <hc:Interaction.Triggers>
  70.         <hc:EventTrigger EventName="PageUpdated">
  71. <WrapPanel
  72.     Grid.Column="0"
  73.     Margin="10,0"
  74.     VerticalAlignment="Center"
  75.     Orientation="Horizontal">
  76.     <TextBlock
  77.         HorizontalAlignment="Left"
  78.         VerticalAlignment="Center"
  79.         Text="当前选择:" />
  80.     <ui:SymbolIcon
  81.         FontSize="32"
  82.         Foreground="CornflowerBlue"
  83.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  84.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  85.     <TextBlock
  86.         Margin="10,0"
  87.         HorizontalAlignment="Left"
  88.         VerticalAlignment="Center"
  89.         Foreground="Blue"
  90.         Text="{Binding ViewModel.SelectedItem.Text}" />
  91. </WrapPanel><hc:EventToCommand Command="{Binding ViewModel.PageUpdatedCommand}" PassEventArgsToCommand="True" />
  92.         </hc:EventTrigger>
  93.     </hc:Interaction.Triggers>
  94. </hc:Pagination><hc:Pagination
  95.     DataCountPerPage="{Binding ViewModel.PagerInfo.PageSize}"
  96.     IsJumpEnabled="True"
  97.     MaxPageCount="{Binding ViewModel.PagerInfo.MaxPageCount}"
  98.     MaxPageInterval="5"
  99.     PageIndex="{Binding ViewModel.PagerInfo.CurrentPageIndex, UpdateSourceTrigger=PropertyChanged}">
  100.     <hc:Interaction.Triggers>
  101.         <hc:EventTrigger EventName="PageUpdated">
  102. <WrapPanel
  103.     Grid.Column="0"
  104.     Margin="10,0"
  105.     VerticalAlignment="Center"
  106.     Orientation="Horizontal">
  107.     <TextBlock
  108.         HorizontalAlignment="Left"
  109.         VerticalAlignment="Center"
  110.         Text="当前选择:" />
  111.     <ui:SymbolIcon
  112.         FontSize="32"
  113.         Foreground="CornflowerBlue"
  114.         Symbol="{Binding ViewModel.SelectedItem.Text}"
  115.         ToolTip="{Binding ViewModel.SelectedItem.Text}" />
  116.     <TextBlock
  117.         Margin="10,0"
  118.         HorizontalAlignment="Left"
  119.         VerticalAlignment="Center"
  120.         Foreground="Blue"
  121.         Text="{Binding ViewModel.SelectedItem.Text}" />
  122. </WrapPanel><hc:EventToCommand Command="{Binding ViewModel.PageUpdatedCommand}" PassEventArgsToCommand="True" />
  123.         </hc:EventTrigger>
  124.     </hc:Interaction.Triggers>
  125. </hc:Pagination>   
复制代码
其实处理的逻辑类似了。在调用的父页面中展示也是使用相应的图标代码即可。
[code][/code]这样通过动态配置的菜单,我们就可以让它在系统运行的时候动态加载对应的菜单图标了。
菜单模块配置界面列表效果。

系统运行,动态从后端获取菜单及图标展示如下所示。

 

来源:https://www.cnblogs.com/wuhuacong/archive/2023/10/13/17762715.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具