首页 > 其他分享 >[WPF] 可选择的TextBlock,正则匹配高亮显示

[WPF] 可选择的TextBlock,正则匹配高亮显示

时间:2024-10-12 16:25:00浏览次数:7  
标签:高亮 省略号 示例 选择 TextBlock 正则 WPF 文本

  实现TextBlock控件像TextBox一样支持选择文本,又保留TextBlock显示省略号等特性,找不到参考文献了,抱歉。

  下面演示基于可选择TextBlock实现的效果:

 代码已上传至https://gitee.com/Pumbaa_Peng/textbook-demo.git

 1 <pp:ChromeWindow x:Class="TextBlockDemo.MainWindow"
 2                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3                  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 4                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 5                  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 6                  xmlns:pp="https://www.cnblogs.com/pumbaa"
 7                  xmlns:behaviors="clr-namespace:TextBlockDemo.Behaviors"
 8                  xmlns:attach="clr-namespace:TextBlockDemo.Controls.Attach"
 9                  xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
10                  mc:Ignorable="d"
11                  Title="MainWindow" Height="720" Width="1024"
12                  UseLayoutRounding="True" SnapsToDevicePixels="True"
13                  Background="{DynamicResource PP.Brushes.Background}" Foreground="{DynamicResource PP.Brushes.Foreground}" FontSize="16" TextBlock.LineHeight="24">
14     <pp:ScrollViewerEx HorizontalScrollBarVisibility="Disabled">
15         <StackPanel Margin="18">
16             <TextBlock FontSize="18" LineHeight="36">示例一</TextBlock>
17             <TextBlock Style="{StaticResource App.Styles.TextBlock.Selectable}" Foreground="{DynamicResource PP.Brushes.Warning.Highlight}">这是普通的可选TextBlock</TextBlock>
18             <Line X2="1" Stretch="Uniform" Stroke="#999" Margin="0 18"></Line>
19             <TextBlock FontSize="18" LineHeight="36">示例二</TextBlock>
20             <TextBlock Foreground="{DynamicResource PP.Brushes.Warning.Highlight}" LineHeight="24">可选择文本超出时显示省略号,选择时隐藏省略号</TextBlock>
21             <DockPanel Margin="0 12">
22                 <TextBlock Foreground="#666" VerticalAlignment="Center">绑定文本:</TextBlock>
23                 <TextBox x:Name="input" MinWidth="400" TextWrapping="Wrap" VerticalContentAlignment="Top" Text="在WPF(Windows Presentation Foundation)中,文本修整是一种常用的技术,用于处理文本内容超出其显示区域时的情况。通过设置TextBlock的TextTrimming属性,可以指定当文本超出其容器边界时应如何显示。这个属性接受TextTrimming枚举的值,这些值决定了文本的修整行为。" />
24             </DockPanel>
25             <TextBox Style="{StaticResource App.Styles.TextBox.SelectableTextBlock}" MaxWidth="400" HorizontalAlignment="Left" Text="{Binding Text,ElementName=input}" />
26             <Line X2="1" Stretch="Uniform" Stroke="#999" Margin="0 18"></Line>
27             <TextBlock FontSize="18" LineHeight="36">示例三</TextBlock>
28             <TextBlock Foreground="{DynamicResource PP.Brushes.Warning.Highlight}" LineHeight="24">多行可选择文本超出时显示省略号,选择时隐藏省略号</TextBlock>
29             <DockPanel Margin="0 12">
30                 <TextBlock Foreground="#666" VerticalAlignment="Center">行数:</TextBlock>
31                 <Slider x:Name="slider" Minimum="1" Maximum="10" Value="3" SmallChange="1" Width="400" HorizontalAlignment="Left"
32                         TickFrequency="1" TickPlacement="BottomRight" IsSnapToTickEnabled="True" />
33             </DockPanel>
34             <TextBox Style="{StaticResource App.Styles.TextBox.SelectableTextBlock.MaxLines}" MaxLines="{Binding Value,ElementName=slider}" MaxWidth="400" HorizontalAlignment="Left" Text="{Binding Text,ElementName=input}" />
35             <Line X2="1" Stretch="Uniform" Stroke="#999" Margin="0 18"></Line>
36             <TextBlock FontSize="18" LineHeight="36">示例四</TextBlock>
37             <TextBlock Foreground="{DynamicResource PP.Brushes.Warning.Highlight}" LineHeight="24">多行可选择文本超出时显示省略号,选择时隐藏展开</TextBlock>
38             <TextBox Style="{StaticResource App.Styles.TextBox.SelectableTextBlock.AutoExpand}" MaxLines="{Binding Value,ElementName=slider}" Margin="0 12 0 0" MaxWidth="400" HorizontalAlignment="Left" Text="{Binding Text,ElementName=input}" />
39             <Line X2="1" Stretch="Uniform" Stroke="#999" Margin="0 18"></Line>
40             <TextBlock FontSize="18" LineHeight="36">示例五</TextBlock>
41             <TextBlock Foreground="{DynamicResource PP.Brushes.Warning.Highlight}" LineHeight="24">文本正则高亮显示(可以多个正则,每个正则不同颜色)</TextBlock>
42             <TextBlock Margin="0 12 0 0" Style="{StaticResource App.Styles.TextBlock.Selectable}" TextWrapping="Wrap" attach:TextElement.Placeholder="{Binding Text,ElementName=input}">
43                 <i:Interaction.Behaviors>
44                     <behaviors:TextHighlightBehavior>
45                         <behaviors:TextHighlightBehavior.HighlightRules>
46                             <behaviors:HighlightRule Regex="[a-zA-Z]+" Brush="#F5201B" />
47                             <behaviors:HighlightRule Regex="文本|技术" Brush="#F69A18" />
48                         </behaviors:TextHighlightBehavior.HighlightRules>
49                     </behaviors:TextHighlightBehavior>
50                 </i:Interaction.Behaviors>
51             </TextBlock>
52             <Line X2="1" Stretch="Uniform" Stroke="#999" Margin="0 18"></Line>
53         </StackPanel>
54     </pp:ScrollViewerEx>
55 </pp:ChromeWindow>

 

标签:高亮,省略号,示例,选择,TextBlock,正则,WPF,文本
From: https://www.cnblogs.com/pumbaa/p/18460762

相关文章

  • WPF 性能优化-列表控件性能
    下面记录几种针对大数据列表控件性能的增强特性,WPF所有继承自ItemsControl的控件(列表控件)都支持这些增强特性,包括ListBox、ComboBox、ListView、TreeView以及DataGrid。一、虚拟化WPF列表控件所提供的最重要的功能就是UI虚拟化。UI虚拟化是列表只为可见区域中能显示的项创建容器......
  • WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现C
    1、新建了一个用户控件,里面画了一个实心圆,以及一个文本控件的组合,当作我要实验使用的用户控件(TestUserControl)。 2、在主窗体里面进行引用,可以看到引用以后,会在工具箱上显示新增的用户控件3、为了测试方便,我直接在先前的Lo'gin页面直接进行添加该用户控件,效果如下。 4、......
  • WPF 动画-VisualStateManager
    动画状态-VisualStateManagerVisualStateManager控件可以通过VisualState来定义控件的不同动画状态,然后在C#代码中合适地方,使用VisusalStateManager.GoToState()或VisualStateManager.GoToElementState()方法来切换到对应的状态,从而实现样式的切换。一、用法介绍1、关键成员......
  • WPF 等距布局
    本文告诉大家如何使用WPF的自定义布局做等距布局实际做的效果很简单,因为在开发我容易就用到了等距的控件。等距控件就是在指定的宽度下,平均把控件放在水平的地方,这样相等于StackPanel的水平,但是没有做水平压缩。在这个控件,无论在水平放多少个控件,都会在相同的高度把他们放下。......
  • 2019-7-12-wpf-VisualBrush-已知问题
    titleauthordateCreateTimecategorieswpfVisualBrush已知问题lindexi2019-7-1221:7:41+08002018-2-1317:23:3+0800WPF本文告诉大家,visualBrush已知bug,希望大家使用VisualBrush时可以知道如果把VisualBrush绑定的是在元素加入到视觉树前,那么在元素加入到视觉树之后移除......
  • WPF Image display webp via BitMapImgae BeginInit UriSource EndInit in MVVM
    privatevoidGenenerateBitMapImageViaUrl(stringurl){BitmapImagebmi=newBitmapImage();bmi.BeginInit();bmi.UriSource=newUri(url,UriKind.RelativeOrAbsolute);bmi.EndInit();if(bmi.CanFreeze){bmi.Freeze();}......
  • 开源项目更新|WPF/Uno Platform/WinUI 3三个版本的《英雄联盟客户端》
    ​哈喽大家好!我们是中韩MicrosoftMVP夫妇Vicky&James^^很高兴能加入博客园和大家分享我们的技术!自2008年以来,我们一直深耕于WPF技术,积累了丰富的经验。这些年来,随着Xamarin、MAUI、Uno-Platform、AvaloniaUI和OpenSilver等跨平台技术的不断发展,我们也将在WPF中积累的技能成功......
  • WPF 实现点击空白位置让TextBox等失焦
    在使用WPF开发桌面应用时,可能会遇到一个常见需求:当用户在界面上点击某个控件之外的空白区域时,当前获得焦点的控件(例如TextBox、ComboBox等)自动失去焦点。这种体验在一些场景下非常实用,尤其是当你希望用户在点击其他地方后完成对输入控件的编辑操作时。本文将介绍如何在......
  • DevExpress WPF中文教程:如何解决数据更新的常见问题?
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为......
  • DevExpress WPF中文教程:如何解决数据更新的常见问题?
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......