1.自定义UserControl
<UserControl x:Class="IFD.Base.Controls.UCMatchTextBlock"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Name="ucSelf"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<TextBlock Name="txt" TextTrimming="CharacterEllipsis" FontSize="12"
Text="{Binding Text,ElementName=ucSelf}"
Foreground="{Binding Foreground,ElementName=ucSelf}"/>
</Grid>
</UserControl>
2.后台代码
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Linq;
using System.Windows.Documents;
using System;
namespace IFD.Base.Controls
{
/// <summary>
/// Interaction logic for UCMatchTextBlock.xaml
/// </summary>
public partial class UCMatchTextBlock : UserControl
{
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(UCMatchTextBlock), new PropertyMetadata(string.Empty, (sender, e) =>
{
(sender as UCMatchTextBlock).Match();
}));
public string Keyword
{
get { return (string)GetValue(KeywordProperty); }
set { SetValue(KeywordProperty, value); }
}
public static readonly DependencyProperty KeywordProperty =
DependencyProperty.Register("Keyword", typeof(string), typeof(UCMatchTextBlock), new PropertyMetadata(string.Empty, (sender, e) =>
{
(sender as UCMatchTextBlock).Match();
}));
public Brush KeywordColor
{
get { return (Brush)GetValue(KeywordColorProperty); }
set { SetValue(KeywordColorProperty, value); }
}
public static readonly DependencyProperty KeywordColorProperty =
DependencyProperty.Register("KeywordColor", typeof(Brush), typeof(UCMatchTextBlock), new PropertyMetadata(Brushes.Red, (sender, e) =>
{
(sender as UCMatchTextBlock).Match();
}));
public UCMatchTextBlock()
{
InitializeComponent();
}
private void Match()
{
if (string.IsNullOrEmpty(this.Text) || string.IsNullOrEmpty(this.Keyword))
{
return;
}
int index = this.Text.IndexOf(this.Keyword,StringComparison.InvariantCultureIgnoreCase);
if (index < 0)
{
return;
}
TextPointer tp = this.txt.Inlines.FirstOrDefault().ContentStart;
TextRange tr = new TextRange(tp.GetPositionAtOffset(index), tp.GetPositionAtOffset(index + this.Keyword.Length));
tr.ApplyPropertyValue(TextBlock.ForegroundProperty, this.KeywordColor);
}
}
}