我正在尝试将Silverlight控件的颜色设置为我的应用程序使用的ResourceDictionary中定义的颜色的略微透明版本。
为此,我的策略 将颜色分解为组件,以便我可以抓取RGB值,然后在其上设置我自己的alpha值得到我的半透明色。
ResourceDictionary看起来像:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib">
<system:Byte x:Key="PrimaryLightColorAlphaValue">#FF</system:Byte>
<system:Byte x:Key="PrimaryLightColorRedValue">#DB</system:Byte>
<system:Byte x:Key="PrimaryLightColorGreenValue">#E5</system:Byte>
<system:Byte x:Key="PrimaryLightColorBlueValue">#F1</system:Byte>
<Color x:Name="PrimaryLightColor" A="{StaticResource PrimaryLightColorAlphaValue}"
R="{StaticResource PrimaryLightColorRedValue}"
G="{StaticResource PrimaryLightColorGreenValue}"
B="{StaticResource PrimaryLightColorBlueValue}" />
<SolidColorBrush x:Name="PrimaryLightColorBrush" Color="{StaticResource PrimaryLightColor}" />
....
然后我的颜色将通过引用颜色或它的组件在我的应用程序中使用。
....
<Border Background="{StaticResource PrimaryLightColorBrush}" />
....
<LinearColorKeyFrame KeyTime="00:00:00">
<LinearColorKeyFrame.Value>
<Color A="#CC"
R="{StaticResource PrimaryLightColorBrushRedValue}"
G="{StaticResource PrimaryLightColorBrushGreenValue}"
B="{StaticResource PrimaryLightColorBrushBlueValue}" />
</LinearColorKeyFrame.Value>
</LinearColorKeyFrame>
....
我的问题:
Silverlight XAML显然本身不支持Byte类型:因此我在ResourceDictionary中定义的颜色部分永远不会加载并抛出“类型'字节'找不到”错误。
那么除了不使用字节外,我怎样才能实现将A,R,G,B颜色值分解为字节的等价物? (使用字符串和类型转换?)或者也许是一种更好的方法来定义颜色,继承/使用它,然后覆盖它的alpha值?我需要通过XAML完全实现这一目标。
有什么想法吗?
答案 0 :(得分:1)
以下是使用转换器更改alpha的方法。
这是转换器:
public class ChangeAlphaConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var color = (Color) value;
color.A = byte.Parse((string) parameter);
return color;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
这就是你如何使用它:
<UserControl.Resources>
<Color x:Key="BaseColor">#fff</Color>
<SilverlightTests:ChangeAlphaConverter x:Key="ChangeAlpha"/>
</UserControl.Resources>
...
<Border>
<Border.Background>
<SolidColorBrush Color="{Binding Source={StaticResource BaseColor}, Converter={StaticResource ChangeAlpha}, ConverterParameter=100}"/>
</Border.Background>
</Border>
在示例中,我们将边框的背景设置为纯白色(来自BaseColor
),并将颜色的alpha设置为100(十进制)