SystemAccentColor + Converter

时间:2016-09-09 16:07:13

标签: xaml uwp windows-10-universal

[UWP]我从 SystemAccentColor 颜色创建了一个 SolidColorBrush 资源,我试图添加一个转换器来减轻颜色,但它只在运行时工作...我看到了颜色较浅,但如果我进入设置操作系统,我改变了重音颜色,它会改变其他文本,而我的颜色与转换器不起作用。有没有一种方法可以在我更改系统重音颜色时“更新”我的资源?

在我的应用中:

<Grid Background="{ThemeResource AuraAccent}"/>
<Grid Background="{ThemeResource AuraAccentLight1}"/>

的ResourceDictionary:

<SolidColorBrush x:Key="AuraAccent" Color="{ThemeResource SystemAccentColor}"/>
<SolidColorBrush x:Key="AuraAccentLight1" Color="{Binding Source={ThemeResource SystemAccentColor}, Converter={ThemeResource shade}, ConverterParameter=30}"/>

AuraAccent 在运行时和我更改强调色时工作。

AuraAccentLight1 在运行时工作,但在更改强调色时不起作用。

实际上如何运作: http://sharex.lucapatera.it/uploads/2016-08-31_19-34-32.mp4

2 个答案:

答案 0 :(得分:0)

我浏览了一些资源字典文件,并注意到应用程序初始加载时将加载字典。实际主题资源的更改将更新,但不会更新自定义画笔(在您的情况下,AuraAccentLight1,因为它使用转换器)。

这就是我所做的。我没有创建一个仅使用一次Shade颜色的ResourceDictionary,而是将第二个Grid绑定到第一个网格,说第一个Grid的颜色发生变化时,第二个Grid Color也应该更新。

以下是我的XAML

<Grid x:Name="grid" Background="{ThemeResource AuraAccent}"/>
<Grid>
    <Grid.Background>
        <SolidColorBrush Color="{Binding Background.Color, Converter={StaticResource ColorHelper}, ElementName=grid,ConverterParameter=30}" />
    </Grid.Background>
</Grid>

如果有帮助,请告诉我。

答案 1 :(得分:0)

受到AVK Naidu的启发,我已经以这种方式解决了:

<SolidColorBrush x:Key="AuraAccentLight1" Color="{Binding Color, Source={ThemeResource AuraAccent}, Converter={ThemeResource shade}, ConverterParameter=30}"/>

感谢所有人

最终结果: http://sharex.lucapatera.it/uploads/2016-09-10_19-33-45.gif