Связывание с несколькими свойствами текстового блока - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть требование, чтобы текстовый блок становился красным, жирным шрифтом, подчеркиванием, а шрифт увеличивался при проверке при нажатии кнопки сохранения.

Ниже мой xamlcode

<TextBlock  HorizontalAlignment="Right"
                            Foreground="{x:Bind Model.FirstNameError, Converter={StaticResource ErrorColorConverter}, Mode=OneWay}" 
                            FontStyle="{x:Bind Model.FirstNameError, Converter={StaticResource ErrorFontStyleConverter}, Mode=OneWay}"
                            FontSize="{x:Bind Model.FirstNameError, Converter={StaticResource ErrorFontSizeConverter}, Mode=OneWay}"                            
                    <Run Text="First Name" TextDecorations="{x:Bind Model.FirstNameError, Converter={StaticResource TextUnderlineConverter},Mode=OneWay}" />                    
                </TextBlock>

Код конвертера:Я создал несколько конвертеров, как показано ниже, для ErrorColorConverter, ErrorFontSizeConverter и TextUnderlineConverter

 public class ErrorFontStyleConverter: IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            if ((bool)value)
                return  FontStyle.Italic;
            else
                return FontStyle.Normal;
        }

        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            throw new NotImplementedException();
        }

    }

Он работает именно так, как мне нужно, но мне нужны некоторые предложения о том, если это можно сделать лучше?способы упростить это enter image description here

1 Ответ

0 голосов
/ 18 декабря 2018

Вы можете использовать ConverterParameter и получать их все из одного конвертера

 <TextBlock Foreground="{x:Bind FirstNameError,Mode=OneWay,Converter={StaticResource ErrorToFont},ConverterParameter=foreground}"
               FontStyle="{x:Bind FirstNameError,Mode=OneWay,Converter={StaticResource ErrorToFont},ConverterParameter=fontstyle}"
               FontWeight="{x:Bind FirstNameError,Mode=OneWay,Converter={StaticResource ErrorToFont},ConverterParameter=fontweight}">

// Конвертер

public class ErrorFontConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            if (parameter.ToString() == "fontstyle")
                return (bool)value ? Windows.UI.Text.FontStyle.Italic : Windows.UI.Text.FontStyle.Normal;
            else if (parameter.ToString() == "foreground")
                return (bool)value ? new SolidColorBrush(Colors.Red) : new SolidColorBrush(Colors.Blue);
            else
                return (bool)value ? FontWeights.Bold : FontWeights.Normal;
        }

        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            throw new NotImplementedException();
        }

    }
...