如何解决更改 ResourceDictionary 中其他资源绑定到 MVVM 中的资源
我有一个 WPF 应用程序显示一个区域的布局,并覆盖了兴趣点 (POI)。
这些区域是已经转换为 DrawingImages 的 SVG,有很多 GeometryDrawings,即
<DrawingImage x:Key="Area1">
<DrawingImage.Drawing>
<DrawingGroup ClipGeometry="M0,0 V249 H1220 V0 H0 Z">
<GeometryDrawing Pen="{DynamicResource AreaPen}" Geometry="F1 M1220 ..." />
<GeometryDrawing Pen="{DynamicResource AreaPen}" Geometry="F1 M1220 ... "/>
<GeometryDrawing Pen="{DynamicResource AreaPen}" Geometry="F1 M1220,..." />
<GeometryDrawing Pen="{DynamicResource AreaPen}" Geometry="F1 M1220..." />
...
</DrawingGroup>
</DrawingImage.Drawing>
这些绘图图像存储在 ResourceDictionary A 中。
我的应用支持在明暗模式之间切换。为此,我使用 MDIX,它提供了一个“PalleteHelper”,允许您在运行时更改主题。如果 Theme 更改为 Light,我需要更改用于绘制 GeometryDrawings 的 Pen。因此,我已将 GeometryDrawing 中使用的 Pen 提取到一个单独的资源中(也在 ResourceDictionary A 中):
<Pen Brush="{DynamicResource lightmodeBrush}" Thickness="10" ... >
其中的 Brush 是这样指定的:
<SolidColorBrush Color="#FF333333" x:Key="lightmodeBrush" />
我还有一个 Brush,当应用程序在 ResourceDictionary 中设置为暗模式时应该使用它A:
<SolidColorBrush Color="#FFddddDD" x:Key="DarkModeBrush" />
ResourceDictionary A 然后与我的 App.xaml 中的所有其他内容合并。
每当 IsDark 绑定属性像这样更改时,我当前都会在我的 viewmodel 中设置 Pen's Brush:
if (_isDark)
{
((Pen)Application.Current.Resources["Area1"]).Brush = ((Brush)Application.Current.Resources["DarkModeBrush"]);
}
else
{
((Pen)Application.Current.Resources["Area1"]).Brush = ((Brush)Application.Current.Resources["lightmodeBrush"]);
}
这感觉……令人讨厌,因为我的 VM 需要了解钢笔和画笔。这样做的(更)正确的方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。