none
Problemas ao passar um parametro para um Converter RRS feed

  • Pergunta

  • Olá, estou usando um Converter para deixar um resource SolidColorBrush com um nível de transparência variável. O problema é que preciso passar o valor Alpha como parâmetro que vai representar a opacidade que será retornada só que está dando erro. Quando eu tento sem passar nenhum parâmetro funciona, porém, se tento inserir um número como parâmetro dá erro no xaml e a pagina não abre.

    Este é o código do Converter:

    public class TransparencyConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, string language)
            {
                SolidColorBrush scb = (SolidColorBrush)value;
                if (parameter != null)
                    return Color.FromArgb((byte)parameter, scb.Color.R, scb.Color.G, scb.Color.B);
                else
                    return Color.FromArgb(100, scb.Color.R, scb.Color.G, scb.Color.B);
            }
            public object ConvertBack(object value, Type targetType, object parameter, string language)
            {
                throw new NotImplementedException();
            }
        }

    Se eu tentar usar desta desta maneira funciona:

    <SolidColorBrush x:Key="Brush1" Color="{Binding Converter={StaticResource colorTransparencyConverter}, Mode=OneWay, Source={StaticResource ThemeAccent}}"/>

    Porém se tento passar um valor assim dá erro no xaml:

    <SolidColorBrush x:Key="Brush1" Color="{Binding ConverterParameter=100, Converter={StaticResource colorTransparencyConverter}, Mode=OneWay, Source={StaticResource ThemeAccent}}"/>

    Alguem tem alguma solução para isso? Desde já agradeço!

    sexta-feira, 3 de julho de 2015 00:46

Respostas

  • Provavelmente o erro está acontecendo ao tentar converter o valor passado por parâmetro para byte, tente fazer o cast da seguinte maneira.

      SolidColorBrush scb = (SolidColorBrush)value;
                var opacidade = byte.Parse(parameter.ToString());
    
                if (parameter != null)
                    return Color.FromArgb(opacidade, scb.Color.R, scb.Color.G, scb.Color.B);
                else
                    return Color.FromArgb(100, scb.Color.R, scb.Color.G, scb.Color.B);

    sexta-feira, 3 de julho de 2015 14:27

Todas as Respostas

  • Olá Franklin, poderia postar qual erro está acontecendo?
    sexta-feira, 3 de julho de 2015 11:11
  • Specified cast is not valid.

    Aparece isso na ErrorList e o trecho do código do xaml fica sublinhado o aplicativo roda mas a página não abre.

    sexta-feira, 3 de julho de 2015 13:30
  • Provavelmente o erro está acontecendo ao tentar converter o valor passado por parâmetro para byte, tente fazer o cast da seguinte maneira.

      SolidColorBrush scb = (SolidColorBrush)value;
                var opacidade = byte.Parse(parameter.ToString());
    
                if (parameter != null)
                    return Color.FromArgb(opacidade, scb.Color.R, scb.Color.G, scb.Color.B);
                else
                    return Color.FromArgb(100, scb.Color.R, scb.Color.G, scb.Color.B);

    sexta-feira, 3 de julho de 2015 14:27
  • Perfeito, Bruno Maschio Joaquin agora consegui muito obrigado!
    sexta-feira, 3 de julho de 2015 16:51