WinUI 3中如何将Brush转换为SolidColorBrush?
解决WPF迁移WinUI3时Brushes转SolidColorBrush的类型错误
问题根源
你代码里的Brushes.Red/Green属于System.Drawing命名空间(WPF常用),但WinUI3的SolidColorBrush依赖的是Windows.UI.Color或Microsoft.UI.Color类型,两者分属不同框架体系,直接转换会触发类型不匹配错误。
解决方案
方法1:用WinUI3内置颜色常量替换
直接使用WinUI3提供的Colors类下的颜色值,传入SolidColorBrush构造函数即可:
using Microsoft.UI.Xaml.Media; using Windows.UI; // 或 Microsoft.UI,两者颜色常量基本一致 public SolidColorBrush PowerBrush { get { if (_powerMode == PowerMode.Off) { return new SolidColorBrush(Colors.Red); } else { return new SolidColorBrush(Colors.Green); } } }
方法2:复用WinUI3系统资源(推荐)
你注释里的系统资源更符合WinUI3设计规范,正确的资源获取方式如下:
using Microsoft.UI.Xaml.Media; public SolidColorBrush PowerBrush { get { if (_powerMode == PowerMode.Off) { return (SolidColorBrush)Application.Current.Resources["SystemFillColorCriticalBrush"]; } else { return (SolidColorBrush)Application.Current.Resources["SystemFillColorSuccessBrush"]; } } }
注意:默认新建的WinUI3项目会自动包含系统资源字典,若缺失可在App.xaml中添加对应引用。
额外注意事项
- 移除不必要的
System.Drawing命名空间引用,避免命名冲突; - WinUI3中
SolidColorBrush的构造函数仅接受Color类型参数,不能直接传入System.Drawing.Brush实例。
内容的提问来源于stack exchange,提问作者Marek Pio
相关产品推荐
相关产品推荐

