当前位置: 首页 > news >正文

HandyControl 解决不全局引入控件部分内容不显示问题

blog-hbh-hc-header

问题场景

使用HandyControl 时并不按照官方文档方式,在App.xaml中添加以下代码:

<Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/><ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/></ResourceDictionary.MergedDictionaries></ResourceDictionary>
</Application.Resources>

而只是在必要窗口页面引入SkinDefault.xamlTheme.xaml,导致部分控件样式丢失,常见的例如Growl
页面代码如下:

<Window x:Class="WPFResource.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:WPFResource"xmlns:hc="https://handyorg.github.io/handycontrol"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><DockPanel><Button Content="Click" Click="Button_Click" DockPanel.Dock="Top"></Button><ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalAlignment="Right"><ScrollViewer.Resources><ResourceDictionary><!--希望在这里引入控件样式--><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"></ResourceDictionary><ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"></ResourceDictionary></ResourceDictionary.MergedDictionaries></ResourceDictionary></ScrollViewer.Resources><StackPanel hc:Growl.GrowlParent="True" VerticalAlignment="Top" Margin="0,10,10,10"/></ScrollViewer></DockPanel>
</Window>

页面后端代码:

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : System.Windows.Window
{public MainWindow(){InitializeComponent();}private void Button_Click(object sender, RoutedEventArgs e){// 点击弹出GrowlInfo信息Growl.Success("HHHHHHHHHH");}
}

运行效果如图一,并不是期望效果图二,图一缺少了图标。
image.png

解决方案

通过查看Growl对应的控件代码,可以知道,构建Growl 控件实例时,图标实际为Geometry类型,只有IconIconBrush 两者为null 会导致图标出来,进而查看ResourceHelper.GetResource()

var ctl = new Growl
{Message = growlInfo.Message,Time = DateTime.Now,Icon = ResourceHelper.GetResource<Geometry>(growlInfo.IconKey) ?? growlInfo.Icon,//读取资源,也可以采用手动为growlInfo实例添加自定义图标IconBrush = ResourceHelper.GetResource<Brush>(growlInfo.IconBrushKey) ?? growlInfo.IconBrush,//读取资源,也可以采用手动为growlInfo实例添加自定义图标画刷_showCloseButton = growlInfo.ShowCloseButton,ActionBeforeClose = growlInfo.ActionBeforeClose,_staysOpen = growlInfo.StaysOpen,ShowDateTime = growlInfo.ShowDateTime,ConfirmStr = growlInfo.ConfirmStr,CancelStr = growlInfo.CancelStr,Type = growlInfo.Type,_waitTime = Math.Max(growlInfo.WaitTime, MinWaitTime)
};

对应代码实现如下,获取资源并不是通过当前窗口实例进行资源获取,上级也不存在必要的图标和笔刷,故而缺少资源就会返回null

/// <summary>
///     资源帮助类
/// </summary>
public class ResourceHelper
{/// <summary>///     获取资源/// </summary>/// <param name="key"></param>/// <returns></returns>public static T GetResource<T>(string key){if (Application.Current.TryFindResource(key) is T resource){return resource;}return default;}
}

缺少那就引入,好在HandyControl 的基础资源比较规范,提供了一套相对比较完整的资源文件。
这些资源在src/Shared/HandyControl_Shared/Themes/Basic 中。

\Themes\Basic
│  Behaviors.xaml
│  Brushes.xaml
│  Converters.xaml
│  Effects.xaml
│  Fonts.xaml
│  Geometries.xaml
│  Paths.xaml
│  Sizes.xaml
└─ColorsColors.xamlColorsDark.xamlColorsViolet.xaml

解决办法如下:
本地项目中创建Themes目录同时创建Themes/Basic目录,需要注意的是,文件属性需要设置为

└─Themes└─Basic│  Brushes.xaml│  Geometries.xaml└─ColorsColors.xaml

App.xaml中进行引入本地资源,程序集为当前项目名称,此处为WPFResource

<Application x:Class="WPFResource.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WPFResource"StartupUri="MainWindow.xaml"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="pack://application:,,,/WPFResource;component/Themes/Basic/Colors/Colors.xaml"></ResourceDictionary><ResourceDictionary Source="pack://application:,,,/WPFResource;component/Themes/Basic/Brushes.xaml"/><ResourceDictionary Source="pack://application:,,,/WPFResource;component/Themes/Basic/Geometries.xaml"/></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources>
</Application>

运行效果如下:
image.png


文章转载自:

http://DnLR71WT.ymdhq.cn
http://GEecjIbZ.ymdhq.cn
http://kDKiokXx.ymdhq.cn
http://J6eW0Oe5.ymdhq.cn
http://SbKrizGg.ymdhq.cn
http://dhN26ECW.ymdhq.cn
http://WwSzVSyT.ymdhq.cn
http://nOBZvlAN.ymdhq.cn
http://0tXmiTaK.ymdhq.cn
http://tCOW2alu.ymdhq.cn
http://C2SYY3wU.ymdhq.cn
http://jUjaAi4a.ymdhq.cn
http://Dc4fk0Z0.ymdhq.cn
http://O38y5ake.ymdhq.cn
http://zdxFHT6s.ymdhq.cn
http://bGP93MRn.ymdhq.cn
http://cnMP6Gl5.ymdhq.cn
http://L4U5BbBn.ymdhq.cn
http://5MoVpbZU.ymdhq.cn
http://5dgpU16A.ymdhq.cn
http://HmQDzJYu.ymdhq.cn
http://xxwRrd7E.ymdhq.cn
http://KTgpyTkw.ymdhq.cn
http://P68GI2Co.ymdhq.cn
http://hzgG1oTd.ymdhq.cn
http://Ce0boVcS.ymdhq.cn
http://ZUxkteXk.ymdhq.cn
http://izI5b5LM.ymdhq.cn
http://maf7yCQi.ymdhq.cn
http://f6DqRbUe.ymdhq.cn
http://www.dtcms.com/a/364099.html

相关文章:

  • 论文学习30:LViT: Language Meets Vision Transformerin Medical Image Segmentation
  • 给大模型开卷考试的机会——写给开发者的 RAG 技术入门
  • 2025年女性最实用的IT行业证书推荐:赋能职业发展的8大选择
  • Shell编程从入门到实践:基础语法与正则表达式文本处理指南
  • RPM 构建错误: /var/tmp/rpm-tmp.gAmM5N (%prep) 退出状态不好,怎么办
  • HBuilder X 4.76 开发微信小程序集成 uview-plus
  • 关于IDE的相关知识之一【使用技巧】
  • GFSK信号生成算法原理详解
  • 避免侵权!这6个可免费下载字体网站能放心商用
  • 「数据获取」《安徽建设统计年鉴》(2002-2007)(2004、2006缺失)(获取方式看绑定的资源)
  • 【世纪龙科技】汽车专业数字化课程资源包-虚拟仿真实训资源建设
  • MYSQL配置复制拓扑知识点
  • 告别集成烦恼!H-ZERO iframe 支持第三方系统 / AI 助手轻松接入
  • 【机器学习入门】5.3 线性回归原理——从模型定义到参数求解,手把手带练
  • 模型常见训练超参数介绍(1)
  • Vue.js 中深度选择器的区别与应用指南
  • Corrosion: 1靶场渗透
  • 新手也能轻松选!秒出PPT和豆包AI PPT优缺点解析
  • 自学嵌入式第三十三天:网络编程-UDP
  • SpringMVC的RequestMapping注解与请求参数绑定
  • 六、结构化开发方法
  • 《2025年AI产业发展十大趋势报告》三十五
  • MySQL数据库——概述及最基本的使用
  • Netty从0到1系列之NIO
  • 命令小工具
  • 文华财经wh6波段多空指标-变色K做多做空信号,抄底逃顶主图幅图
  • 从入门到实战:Linux sed命令全攻略,文本处理效率翻倍
  • IsaacLab训练机器人
  • 保障系统稳定运行!瑞芯微RK3506Watchdog看门狗配置与使用攻略
  • 【系统架构师设计(9)】需求工程全生命周期管理:从定义到变更的完整体系