Как многоцветный текст строки в списке C#? - PullRequest
1 голос
/ 17 апреля 2020

Я хочу сделать приложение для регистрации в C#. У меня есть список с именем LogBox, и я хочу покрасить несколько раз подряд. например: «[04:30:20] - Admin: Hello», но каждая переменная должна быть разного цвета в строке списка.

Как мне это сделать с помощью кнопки?

Я пытался LogBox.Items.Add(LogBox.ForeColor = color.red + "[" et c et c et c. но это не работает.

1 Ответ

0 голосов
/ 17 апреля 2020

Я думаю, вы могли бы искать что-то вроде этого.

Этого легко достичь, если у вас есть класс модели, связанный с вашим ListBox. Выполните следующие шаги

Шаг 1 - Создайте класс модели, допустим, «ListBoxItemModel.cs»

public class ListBoxItemModel
{
    public string Text { get; set; }

    public Brush ForegroundBrush { get; set; }  
}

Примечание: - I Я не придерживаюсь никакого подхода MVVM здесь для демонстрации. Если вы знакомы, то можете реализовать этот код.

Шаг 2 - Создайте окно с ListBox и определите DataTemplate для вашего класса Model, как показано ниже в вашем MainWindow.

Назначьте DataTemplate свойству ListBox ItemTemplate.

<Window x:Class="SO61263305.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:SO61263305"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Window.Resources>
    <DataTemplate x:Key="LocalTemplate" DataType="local:ListBoxItemModel">
        <TextBlock Text="{Binding Text}" Foreground="{Binding ForegroundBrush}" />
    </DataTemplate>
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>

    <ListBox x:Name="ItemsListBox" Grid.Row="0" Height="200" Width="200" 
             ItemTemplate="{StaticResource LocalTemplate}"/>
</Grid>

Шаг 3 - Создайте список из ListBoxItemModel и привязайте его к ListBox из выделенного кода вашего окна или пользовательского контроля. В моем случае это MainWindow.xaml.cs

private void LoadDataObjects()
{
        var items = new List<ListBoxItemModel>();
        var item = new ListBoxItemModel()
        {
            Text = "John ABCD 1",
            ForegroundBrush = new SolidColorBrush(Color.FromRgb(0, 0, 0))
        };

        items.Add(item);

        item = new ListBoxItemModel()
        {
            Text = "John ABCD 2",
            ForegroundBrush = new SolidColorBrush(Color.FromRgb(200, 79, 24))
        };

        items.Add(item);
        ItemsListBox.ItemsSource = items;
    }

. В вышеупомянутом методе вам нужно добавить каждый элемент с текстом, который вы хотите отобразить, и Foreground Bru sh.

Шаг 4 - Вызовите вышеуказанный метод из вашего конструктора code-behind или вы можете вызвать любые другие события, такие как нажатие кнопки, чтобы загрузить данные в список.

См. Ниже моего полного MainWindow.xaml.cs (код позади MainWindow)

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        LoadDataObjects();
    }

    private void LoadDataObjects()
    {
        var items = new List<ListBoxItemModel>();
        var item = new ListBoxItemModel()
        {
            Text = "John ABCD 1",
            ForegroundBrush = new SolidColorBrush(Color.FromRgb(0, 0, 0))
        };

        items.Add(item);

        item = new ListBoxItemModel()
        {
            Text = "John ABCD 2",
            ForegroundBrush = new SolidColorBrush(Color.FromRgb(200, 79, 24))
        };

        items.Add(item);
        ItemsListBox.ItemsSource = items;
    }
}

Надеюсь, что это даст вам некоторое представление, и вы сможете улучшить ваши требования в дополнение к нему.

Попробуйте и дайте мы знаем, если у вас возникнут какие-либо трудности.

...