none
TextBlock с подсветкой текста С#(WPF) RRS feed

  • Общие обсуждения

  • Столкнулся с необходимостью выделения фрагмента текста в TextBlock, а именно определённых ключевых слов по которым были отфильтрованы элементы ListBox , этот текстовый блок собственно и содержащие

    XAML, мой вариант

    <ListBox Name="ProcedureList" ItemsSource="{Binding Path=ProceduresView.View}">
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                     <StackPanel Name="ProcedurePanel" PreviewMouseDown="ProcedurePanel_OnPreviewMouseDown">
                                        <DockPanel Width="{c:Binding ElementName=MainPanel, Path=Width-40}">
                                            <!--<TextBlock Name="MainText"  TextWrapping="Wrap" FontSize="16" Text="{Binding Path=title}" HorizontalAlignment="Left" />-->
                                            <htb:HighlightTextBlock Name="MainText"  TextWrapping="Wrap" FontSize="16" Text="{Binding Path=title}" HorizontalAlignment="Left">
                                                <htb:HighlightTextBlock.HighlightRules>
                                                    <htb:HighlightRule
                                                        IgnoreCase="{Binding IgnoreCase, Source={StaticResource SourceVm}}" 
                                                        HightlightedText="{Binding Path=title, Converter={StaticResource getFilter}}">
                                                        <htb:HighlightRule.Highlights>
                                                            <htb:HighlightBackgroung Brush="Yellow"/>
                                                        </htb:HighlightRule.Highlights>
                                                    </htb:HighlightRule>
                                                </htb:HighlightTextBlock.HighlightRules>
                                            </htb:HighlightTextBlock>
                                        </DockPanel>
                            </DataTemplate>
          </ListBox.ItemTemplate>
    </ListBox>

    Используется компонент написанный нашим соотечественником с открытым исходным  кодом HighlightedTextBlock

    Закомментированный код это старый TexBlock без выделения

    Новый компонент HighlightTextBlock прекрасно выделяет текст если использовать статический ресурс, как в примере, но когда я пытаюсь его привязать к текущему тексту он не может найти это поле :( , я новенький в WPF помогите разобраться с

    HightlightedText="{Binding Path=title, Converter={StaticResource getFilter}}"

    структура DataContext

    public ObservableCollection<Procedure> Procedures { set; get; }
    public CollectionViewSource ProceduresView { set; get; } = new CollectionViewSource();
    
        ....
    
        Procedures = new ObservableCollection<Procedure>();
        ProceduresView.Filter += Procedures_Filter; // просто доп фильтрация
        ProceduresView.Source = Procedures;
    
        ....
    
    public class Procedure : ObservableObject 
    {
        ....
        public String title { get; set; }
        ....
    }

    Посоветуйте как изменить используемый мною компонент что бы он подхватывал текущий контекст, либо может существует другой вариант подсветки ?

    ПС. Моя учётная запись пока не проверена и мне нельзя выкладывать ссылки, как только я выложу ссылку на сам компонент github, его описание , видио с описанием проблемы, и на упрощённый тестовый проект эмитирующий мой функционал 

    11 ноября 2017 г. 13:12