カスタム透明度レベルが異なる名前付きの色から色オブジェクトを作成する XAML の方法はありますか? 例えば
<Label Background="{SkyBlue;220}" />
これが機能しないことはわかっていますが、例を引用したかっただけです。
カスタム透明度レベルが異なる名前付きの色から色オブジェクトを作成する XAML の方法はありますか? 例えば
<Label Background="{SkyBlue;220}" />
これが機能しないことはわかっていますが、例を引用したかっただけです。
自分で答えを見つけたときの1つです。将来の読者のための正しい方法は次のとおりです。
<Label.Background>
<SolidColorBrush Color="SkyBlue" Opacity=".9" />
</Label.Background>
Opacity
範囲は 0 ~ 1 で、1 は完全に不透明 (非透明) です。
@Dai のコメントに関しては、既に透明度が設定されているカラー リソースを参照している場合、このメソッドは指定された色の透明度レベルをリセットまたはオーバーライドしません。たとえば、リソースの色のSkyBlue
透明度が 0.5 に設定されていて、代わりに 0.7 に設定したい場合、上記の方法は直接機能しません。
Converter
このような状況に対処するには、入力カラーのアルファ コンポーネントをリセットする小さなものを作成するだけです。このようなもの:
public class NoTransparencyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var C = ((Color)value);
return Color.FromArgb(0xFF, C.R, C.G, C.B);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
次に、XAML で使用します。
<SolidColorBrush Color="{Binding Path="YOUR_COLOR_RESOURCE" Converter={x:Static NoTransparencyConverter}}" Opacity=".9" />
これに少し追加するだけです。Opacity
はい、回答で示したようにビア宣言を絶対に設定できますAlpha
がRGB
、依存関係プロパティを設定する必要さえありません。よりも優れたパフォーマンスを提供しますopacity
)。たとえば、黒の値があり、それに不透明度を与えたいとします。その値の最初の 2 オクテットを追加して、同じことを行うことができます。
例として;
"#000000" = 黒 (SOLID)
一方;
"#33000000" = 黒 (不透明度 20%)
"#77000000" = 黒 (不透明度 47%)
"#E5000000" = 黒 (不透明度 90%)
そこにいくつかの詳細を投げて、Opacity
プロパティがすぐに利用できない場合や不変として設定されている場合に、将来的に役立つ可能性があります。お役に立てれば。
補遺:また、要素全体に不透明度を設定するよりも、アルファなどのプロパティを設定する方が常にパフォーマンスが向上することにも注意してください。これは、HTML/CSS シナリオにも当てはまりますbackground-color: rgba(0,0,0,.5)
。<div style="background: black;opacity: .5)