Visual Studio 2022与.NET 6.0环境下Microsoft.Expression.Drawing兼容版本及替代方案咨询
我之前也碰到过一模一样的问题——那个Microsoft.Expression.Drawing包本来就是为旧版.NET Framework设计的,官方根本没推出适配.NET 6+的版本,所以安装时出现兼容报错是必然的。不过不用慌,咱们有几个非常靠谱的替代方案,完全能搞定圆形进度条的需求:
方案一:用WPF原生Path控件手动绘制圆弧
不需要任何额外NuGet包,完全靠WPF自带的控件就能实现。核心思路是用Path的Data属性结合ArcSegment来创建圆弧,再通过绑定进度值动态调整圆弧的角度。
举个简单的例子,你可以在XAML里这么写:
<Path Stroke="Blue" StrokeThickness="8" StrokeLineCap="Round"> <Path.Data> <PathGeometry> <PathFigure StartPoint="100,20"> <ArcSegment x:Name="ProgressArc" Size="80,80" SweepDirection="Clockwise" IsLargeArc="False" Point="100,180"/> </PathFigure> </PathGeometry> </Path.Data> </Path>
然后后台可以写一个值转换器,把0-100的进度值转换成ArcSegment的Point坐标,或者直接通过绑定更新这个点的位置,就能实现进度条的动态变化。这种方式完全自主可控,适合需要高度自定义样式的场景。
方案二:使用微软官方维护的CommunityToolkit控件包
如果你不想自己写太多代码,直接用CommunityToolkit.Wpf.UI.Controls这个NuGet包就好——这是微软官方维护的,完美兼容.NET 6+和VS2022,里面自带现成的CircularProgressBar控件。
步骤很简单:
- 在NuGet包管理器里搜索安装
CommunityToolkit.Wpf.UI.Controls - 在XAML里引入命名空间:
xmlns:controls="clr-namespace:Microsoft.Toolkit.Wpf.UI.Controls;assembly=Microsoft.Toolkit.Wpf.UI.Controls" - 直接使用控件:
<controls:CircularProgressBar Value="75" Maximum="100" Stroke="Green" StrokeThickness="6"/>
这个方案省心省力,控件本身还支持很多自定义属性,比如颜色、厚度、动画效果等等,大部分场景下够用。
方案三:自定义控件重写OnRender方法
如果上面两种都满足不了你的需求,比如需要更复杂的交互或者特效,那可以自己封装一个自定义控件,重写OnRender方法来绘制圆弧。
比如创建一个继承自FrameworkElement的控件,在OnRender里用DrawingContext.DrawArc方法来画:
protected override void OnRender(DrawingContext drawingContext) { base.OnRender(drawingContext); double progress = 0.75; // 这里可以绑定进度值 Point center = new Point(ActualWidth / 2, ActualHeight / 2); double radius = Math.Min(ActualWidth, ActualHeight) / 2 - 4; Pen pen = new Pen(Brushes.Orange, 8); // 计算起始和结束角度 double startAngle = -90; // 从顶部开始 double endAngle = startAngle + progress * 360; drawingContext.DrawArc(pen, center, radius, startAngle * Math.PI / 180, endAngle * Math.PI / 180, true); }
这种方式灵活性最高,想怎么定制就怎么定制,适合有特殊需求的场景。
总的来说,根据你的需求选对应的方案就行:想快速实现用CommunityToolkit,想自己把控细节用原生Path,要高度定制就自己写自定义控件。
内容的提问来源于stack exchange,提问作者chuckp

