微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更改 ResourceDictionary 中其他资源绑定到 MVVM 中的资源

如何解决更改 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 举报,一经查实,本站将立刻删除。