TextBlock выборочная окраска линии - PullRequest
0 голосов
/ 27 мая 2019

Я хочу прочитать файл, а затем, основываясь на некоторых условиях, пометить некоторые строки разными цветами.Я нашел похожие проблемы и ответы, но они не написаны с использованием шаблона MVVM: Выборочная окраска динамического содержимого TextBlock в WPF

Я пробовал:

<ScrollViewer>
  <TextBlock >
    <Run Background="{Binding Path=DiffStatus}" Text="{Binding Path=Diff,   Mode=OneWay}"/>
  </TextBlock>
</ScrollViewer>

Но этораскраска всего текста, а не только выделенных строк

1 Ответ

3 голосов
/ 27 мая 2019

Мой обычный способ сделать это с помощью ItemsControl, вы можете заменить панель на WrapPanel, а шаблон элемента на TextBlock, содержащий все ваши привязки:

<ItemsControl ItemsSource="{Binding Elements}">

    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Text}">
                <TextBlock.Foreground>
                    <SolidColorBrush Color="{Binding Foreground}" />
                </TextBlock.Foreground>
            </TextBlock>
        </DataTemplate>
    </ItemsControl.ItemTemplate>

</ItemsControl>

Затем вернувшись в свою модель представления, вы можетесделать что-то вроде этого:

public class MainViewModel
{
    public TextElement[] Elements { get; } = new TextElement[]
    {
        new TextElement{ Text="Hello World! "},
        new TextElement{ Text="This is some blue text!", Foreground=Colors.Blue }
    };
}

public class TextElement
{
    public string Text { get; set; }
    public Color Foreground { get; set; } = Colors.Black;
}

Результаты:

enter image description here

Очевидно, что если вы хотите динамический документ, то вы заменитеTextElement[] с ObservableCollection<TextElement> и добавлением INPC и т. Д.

Это более тяжело, чем добавление прогонов и пролетов и т. Д., Но с положительной стороны вы можете заменить шаблон элемента на типизированные DataTemplates в блоке ресурсов.который позволяет вам легко встраивать графику или что-либо еще, что вам нужно.

Единственный способ, которым мне удалось этого добиться, - это универсальное пользовательское поведение, которое привязывается к ObservableCollection и управляет дочерними элементами GUI вручную.

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