Usuário com melhor resposta
Problemas ao passar um parametro para um Converter

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!
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);
- Marcado como Resposta Franklin Bitencourt sexta-feira, 3 de julho de 2015 16:51
Todas as 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);
- Marcado como Resposta Franklin Bitencourt sexta-feira, 3 de julho de 2015 16:51
-