当用户在搜索框中输入文本并单击搜索时,我在datagrid中实现了高亮文本。问题是当用户点击数据网格中的滚动条时,高光消失。以下是我的高亮度自定义类:
public class SearchableTextBlock
{
public static DependencyProperty SearchPhraseProperty =
DependencyProperty.RegisterAttached(
"SearchPhrase",
typeof(string),
typeof(SearchableTextBlock), new PropertyMetadata("", SearchPhraseChanged));
public static string GetSearchPhrase(UIElement element)
{
return (string)element.GetValue(SearchPhraseProperty);
}
public static void SetSearchPhrase(UIElement element, string value)
{
element.SetValue(SearchPhraseProperty, value);
}
public static void SearchPhraseChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue == null)
return;
if ((d as TextBlock) != null)
{
TextBlock tbx = d as TextBlock;
String text = tbx.Text;
tbx.Inlines.Clear();
string txtStore = "";
//Loops throught the entire text
for (int i = 0; i < text.Length; i++)
{
txtStore += text[i];
//If search phrase is found
if (txtStore.ToUpper().IndexOf((e.NewValue as string).ToUpper()) > -1)
{
//Creates the formatting for regular text
Run runRegular = new Run();
runRegular.Text = txtStore.Substring(0, txtStore.ToUpper().IndexOf((e.NewValue as string).ToUpper()));
//Creates the formatting for the found text
//Foreground is hardcoded to red.
Run runHighlight = new Run();
runHighlight.Text = txtStore.Substring(txtStore.ToUpper().IndexOf((e.NewValue as string).ToUpper()), txtStore.Length - (txtStore.ToUpper().IndexOf((e.NewValue as string).ToUpper())));
runHighlight.Foreground = new SolidColorBrush(Colors.Red);
runHighlight.FontWeight = FontWeights.Bold;
//Inserts the formatted text to the textblock
txtStore = "";
tbx.Inlines.Add(runRegular);
tbx.Inlines.Add(runHighlight);
}
}
Run runRemaining = new Run();
runRemaining.Text = txtStore;
tbx.Inlines.Add(runRemaining);
}
}
}
这是我的XAML:
<sdk:DataGridTemplateColumn x:Name="Database" >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Database}"
sTextBlock:SearchableTextBlock.SearchPhrase="{Binding SDatabase, Mode=TwoWay}"/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
谢谢!