16

カスタム透明度レベルが異なる名前付きの色から色オブジェクトを作成する XAML の方法はありますか? 例えば

<Label Background="{SkyBlue;220}" />

これが機能しないことはわかっていますが、例を引用したかっただけです。

4

2 に答える 2

39

自分で答えを見つけたときの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" />
于 2013-02-27T14:41:35.560 に答える
27

これに少し追加するだけです。Opacityはい、回答で示したようにビア宣言を絶対に設定できますAlphaRGB、依存関係プロパティを設定する必要さえありません。よりも優れたパフォーマンスを提供します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)

于 2013-02-27T19:52:58.293 に答える