目標是使用匹配的輸入關鍵字在文本塊中粗體顯示文本的單詞。如何使用附加屬性在文本塊中用粗體突出顯示指定關鍵字的單詞
例如:Stackoverflow是一個非常有用的,繼續使用Stackoverflow來提高你的技能。
此外,在關鍵詞是:計算器,現在應該顯示爲
#1是一個非常有用的,繼續使用#1來提升自己的技能。
我試圖使用附加屬性來實現相同的目標。下面是相同
public class HighLightKeyWord : DependencyObject
{
//This word is used to specify the word to highlight
public static readonly DependencyProperty BoldWordProperty = DependencyProperty.RegisterAttached("BoldWord", typeof(string), typeof(HighLightKeyWord),
new PropertyMetadata(string.Empty, OnBindingTextChanged));
public static string GetBoldWord(DependencyObject obj)
{
return (string)obj.GetValue(BoldWordProperty);
}
public static void SetBoldWord(DependencyObject obj, string value)
{
obj.SetValue(BoldWordProperty, value);
}
private static void OnBindingTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var _Key = e.NewValue as string;
var textblk = d as TextBlock;
string SourceText = textblk.Text;
SetBold(_Key, textblk, SourceText);
}
private static void SetBold(string key, TextBlock text, string SourceText)
{
text.Inlines.Clear();
var words = SourceText.Split(' ');
for (int i = 0; i < words.Length; i++)
{
var word = words[i];
var inline = new Run() { Text = word + ' ' };
if (String.Compare(word, key, StringComparison.CurrentCultureIgnoreCase) == 0)
{
inline.FontWeight = FontWeights.Bold;
}
text.Inlines.Add(inline);
}
}
}
//綁定對象的主要
StackOverFlow stkovrflw = new StackOverFlow();
stkovrflw.Text = "Stackoverflow is a very helpful,keep using Stackoverflow to sharpen your skills.";
stkovrflw.KeyWord = "Stackoverflow";
this.DataContext = stkovrflw;
卡代碼在XAML我綁定的值作爲
<TextBlock Text="{Binding Path=Text}" loc:HighLightKeyWord.BoldWord="{Binding Path=KeyWord}" />
上面的代碼工作正常,但是當我通過數據綁定直接設置了xaml中的HighlightText屬性,Text塊中的Text屬性在OnBindingTextChanged方法中變爲空,並且只有在依賴項prop erty被設置。 我使用了基於拼寫檢查概念的這種設計,以便其他茶友可以在他們的項目中重複使用我附加的屬性。 任何人都可以建議如何解決這個問題?