Подтвердить что ты не робот

Укажите уровень прозрачности именованного цвета в XAML

Есть ли способ в XAML создать цветной объект из именованного цвета с другим пользовательским уровнем прозрачности? например.

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

Я знаю, что это не работает, но просто хотел привести пример.

4b9b3361

Ответ 1

Один из тех случаев, когда вы сами находите ответ. Здесь правильный путь для любого будущего читателя:

<Label.Background>
    <SolidColorBrush Color="SkyBlue" Opacity=".9" />
</Label.Background>

Opacity находится между 0 и 1, 1 является полным непрозрачным (непрозрачным).

Изменить

Что касается комментария @Dai, этот метод действительно не reset или переопределяет уровень прозрачности указанного цвета, если вы ссылаетесь на ресурс цвета, который уже установил некоторую прозрачность. Например, если ваш цвет ресурса 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" />

Ответ 2

Просто чтобы добавить немного к этому. Да, вы можете абсолютно установить Opacity с помощью декларативного, как вы показали в своем ответе, но вам даже не нужен набор свойств зависимости, вы можете сделать это прямо в шестнадцатеричном формате для цвета, используя Alpha поверх ваши значения RGB (что, кстати, обеспечивает лучшую производительность, чем opacity). Где как, скажем, у вас есть значение для черного, и вы хотите придать ему некоторую непрозрачность. Первые 2 октета этого значения могут быть добавлены, чтобы выполнить то же самое.

Как пример;

"# 000000" = черный (твердый)

где как;

"# 33000000" = черный (с непрозрачностью 20%)

"# 77000000" = черный (непрозрачность 47%)

"# E5000000" = черный (с непрозрачностью 90%)

Просто добавьте некоторые подробности и, возможно, поможете вам в будущем, когда свойство Opacity может быть недоступно или установлено как неизменяемое. Надеюсь, это поможет.

ADDENDUM: Стоит также отметить, что настройка свойства, такого как альфа, всегда будет более производительной, чем установка непрозрачности для всего элемента. Это также относится к сценариям HTML/CSS, в которых что-то вроде background-color: rgba(0,0,0,.5) является лучшей практикой, чем, скажем, <div style="background: black;opacity: .5)