我正在学习WinRT,我为我的程序定义了一个自定义主题,包括覆盖一些默认颜色
目前,我在我的App.xaml中做了类似的事情
<Application>
<Application.Resource>
<ResourceDictionary>
...
<Color x:Key="PrimaryColor">#FF0055A3</Color>
<Color x:Key="PrimaryColorHighlighShade">#FF1263B0</Color>
<Color x:Key="PrimaryColorClickShade">#FF2674BD</Color>
...
<SolidColorBrush x:Key="SliderTrackDecreaseBackgroundThemeBrush" Color="{StaticResoruce PrimaryColor}" />
<SolidColorBrush x:Key="SliderTrackDecreasePointerOverBackgroundThemeBrush" Color="{StaticResoruce PrimaryColorHighlighShade}" />
<SolidColorBrush x:Key="SliderTrackDecreasePressedBackgroundThemeBrush" Color="{StaticResoruce PrimaryColorClickShade}" />
...
</ResourceDictionary>
</Application.Resource>
要获得高光阴影和ClickShade,我打开Photoshop,后藤HSB滑块,并将S向下移动和B向上移动,但我想知道我是否可以在XAML中做到这一点,所以我所要做的就是改变PrimaryColor和其他颜色,并相应地进行调整。
2条答案
按热度按时间rdlzhqv91#
您可以绑定到一个静态资源(参见Is it possible to supply a type converter for a static resource in WPF?),并使用一个值转换器根据您提供的颜色构造一个新的颜色。
编辑:
下面是一些代码来解释:
值转换器代码(为了简单起见,我总是只添加红色,你可以根据自己的喜好进行更复杂的计算):
我的App.Xaml看起来像这样:
请注意,我已经包含了一个本地名称空间,以便随时可以使用转换器。
我的主窗口是这样定义的:
左边的长方形是你的颜色,右边的是粉红色。
suzh9iv82#
您不需要使用Photoshop来更改色彩空间。Visual Studio 2012和Expression Blend都有RGB、HSB、HLS和CYMK色彩空间工具。