gpt4 book ai didi

wpf - 如何在XAML中按颜色组件定义Silverlight颜色?

转载 作者:行者123 更新时间:2023-12-04 22:30:50 26 4
gpt4 key购买 nike

我试图将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实现这一目标。

有任何想法吗?

最佳答案

这是使用更改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(十进制)

关于wpf - 如何在XAML中按颜色组件定义Silverlight颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5250614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com