Как сделать окно прогресса / сообщения, где каждая строка может быть разным шрифтом, размером, цветом?

Я попытался создать TextBlock в моем View, который будет отображать любое сообщение, которое я ему отправлю. Он просто добавляет новую строку каждый раз, когда пишет. Мне нужна возможность писать разными шрифтами, размером и цветом в каждой строке.

Я нашел примеры, которые делают это для ListViews и RichTextBox. Мне все равно, что это за контроль. Нужно просто следовать формату MVVM, и именно здесь у меня возникают проблемы с этими примерами.

Для тех, кто знаком с командным окном, как вы можете сделать командный файл и 'эхо' строки на дисплее? Это то, что я пытаюсь сделать.

1 ответ

Решение

Найден альтернативный цвет строки в Listbox и используется Bind переднего плана Textblock. Понял, что мне нужно создать класс для хранения строки и цвета. Поместите этот класс в ObservableCollection и привяжите к ObservableCollection.

Мой новый класс:

public class DisplayData
{
    public string _string { get; set; }
    public System.Windows.Media.Brush _color { get; set; }
    public int _fontSize { get; set; }
}

XAML:

<ListBox x:Name="Progress_Window" ItemsSource="{Binding pb._displayString}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding _string}" Foreground="{Binding _color}" FontSize="{Binding _fontSize}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Где pb - моя локальная переменная класса в моей виртуальной машине.

Код в модели:

public ObservableCollection<DisplayData> _displayString { get; set; }
...
_displayString = new ObservableCollection<DisplayData>();
string _error = "Error Opening COM Port";
_displayString.Add(new DisplayData { _string = _error, _color = System.Windows.Media.Brushes.Red, _fontSize = 20 });
Другие вопросы по тегам