выравнивание текстовых строк на окнах разных размеров - PullRequest
0 голосов
/ 26 ноября 2018

Я работаю над окном входа в систему, которое должно поддерживать несколько разрешений.в этом окне есть длинная строка текста разных цветов.

<TextBlock   
    Style="{StaticResource TextStyle}"
    TextWrapping="Wrap" HorizontalAlignment="Center" 
    VerticalAlignment="Center"
    TextAlignment="Center">
        <Run  
            Text="{Binding MsgA}"
        />
        <Run                        
            Foreground="#FFFFFF"                      
            FontFamily="{StaticResource CentralSansBook}"                  
            Text="{Binding MsgB}"
        />
</TextBlock>

с этим кодом я получаю это: при низких разрешениях, так как у меня почти половина ширины, я откажусь от красивого форматирования ипросто хочу, чтобы он подходил, чтобы он выглядел следующим образом

This is message A.This is
      message B

на высоких разрешениях. Я хочу, чтобы он выглядел следующим образом

    This is message A.
    This is message B

Я не могу понять, как поддерживать оба поведения.

1 Ответ

0 голосов
/ 26 ноября 2018

Как я вижу, все, что вам нужно, это просто вставить разрыв строки перед вторым сообщением для высокого разрешения.Поэтому я бы сделал это в слое View с конвертером значений:

public class NewLineInsCnv : IValueConverter
{
    public bool InsertNewLine { get; set; } = IsHighResolution();

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (InsertNewLine && value is string st)
        {
            return Environment.NewLine + st;
        }
        return value;
    }

    public object ConvertBack(object value, Type targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException("One way only conversion");
    }

    private static bool IsHighResolution()
    {
        return true;//Check
    }
}

<TextBlock   
        Style="{StaticResource TextStyle}"
        TextWrapping="Wrap" HorizontalAlignment="Center" 
        VerticalAlignment="Center"
        TextAlignment="Center">
        <TextBlock.Resources>
            <local:NewLineInsCnv x:Key="insertNewLineCnv"/>
        </TextBlock.Resources>
        <Run  
            Text="{Binding MsgA}"
        />
        <Run                        
            Foreground="#FFFFFF"                      
            FontFamily="{StaticResource CentralSansBook}"                  
            Text="{Binding MsgB, Converter={StaticResource insertNewLineCnv}}"
        />
    </TextBlock>

При необходимости вы можете сделать InsertNewLine свойством зависимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...