我正在下载一个xml文件并将其保存到手机( Windows Phone 8应用程序),然后我将其作为列表打开。此列表中包含希腊语单词,包含上,下和特殊字符。我希望用户能够通过此列表进行搜索,而不会使他写入与列表中相同的文本,因此,到目前为止,我将搜索栏和列表转换为上部字符,因此如果用户键入“to”该列表突出显示“to”,“To”,“TO”暂时删除不匹配的单词匹配。但是如果用户试图在没有语调的情况下写一个字母,那么列表中具有语调的单词将被删除,直到用户按下退格键并输入带语调的字母。
示例:list有2个单词。 Σπύρος,Μάρα。 用户按下字母'Μ',在列表中,Σπύρος消失,Μάρα变为Μάρα。现在用户输入'α'并且 M άρα也消失了,因为他必须输入'ά'。如果他有,那将是Μάρα等等。
所以我的问题是,是否可以在没有语调的情况下将带有语调的字符替换为相同的字符?例如。 í到a,Ά到A等。在Unicode字符表上,它们有不同的代码。
到目前为止的代码:
private void businessFilterString_TextChanged(object sender, TextChangedEventArgs e)
{
sI.ItemsSource = businesses.Collection.Where(b => b.name.ToUpper().Contains(searchBox.Text.ToUpper()) || b.address.ToUpper().Contains(searchBox.Text.ToUpper())).ToList();
LayoutUpdateFlag = true;
}
private void sI_LayoutUpdated(object sender, EventArgs e)
{
if (LayoutUpdateFlag)
{
SearchVisualTree(sI);
}
LayoutUpdateFlag = false;
}
private void SearchVisualTree(DependencyObject targetElement)
{
var count = VisualTreeHelper.GetChildrenCount(targetElement);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(targetElement, i);
if (child is TextBlock)
{
textBlock1 = (TextBlock)child;
prevText = textBlock1.Text.ToUpper();
HighlightText();
}
else
{
SearchVisualTree(child);
}
}
}
private void HighlightText()
{
if (textBlock1 != null)
{
string text = textBlock1.Text.ToUpper();
textBlock1.Text = text;
textBlock1.Inlines.Clear();
int index = text.IndexOf(searchBox.Text.ToUpper());
int lenth = searchBox.Text.Length;
if (!(index < 0))
{
Run run = new Run() { Text = text.Substring(index, lenth), FontWeight = FontWeights.ExtraBold};
run.Foreground = new SolidColorBrush(Colors.Orange);
textBlock1.Inlines.Add(new Run() { Text = text.Substring(0, index), FontWeight = FontWeights.Normal});
textBlock1.Inlines.Add(run);
textBlock1.Inlines.Add(new Run() { Text = text.Substring(index + lenth), FontWeight = FontWeights.Normal });
}
else
{
//textBlock1.Text = "No Match";
}
}
}
答案 0 :(得分:0)
所以我添加了
private static string DeleteAccentAndSpecialsChar(string OriginalText)
{
string strTemp = OriginalText;
Regex rega = new Regex("[Ά]");
Regex rege = new Regex("[Έ]");
Regex regi = new Regex("[Ί]");
Regex regu = new Regex("[Ύ]");
Regex regh = new Regex("[Ή]");
Regex rego = new Regex("[Ό]");
Regex regw = new Regex("[Ώ]");
strTemp = rega.Replace(strTemp, "Α");
strTemp = rege.Replace(strTemp, "Ε");
strTemp = regi.Replace(strTemp, "Ι");
strTemp = regu.Replace(strTemp, "Υ");
strTemp = regh.Replace(strTemp, "Η");
strTemp = rego.Replace(strTemp, "Ο");
strTemp = regw.Replace(strTemp, "Ω");
return strTemp;
}
并更改了
private void businessFilterString_TextChanged(object sender, TextChangedEventArgs e)
{
sI.ItemsSource = businesses.Collection.Where(b => b.name.ToUpper().Contains(searchBox.Text.ToUpper()) || b.address.ToUpper().Contains(searchBox.Text.ToUpper())).ToList();
LayoutUpdateFlag = true;
}
到
private void businessFilterString_TextChanged(object sender, TextChangedEventArgs e)
{
sI.ItemsSource = businesses.Collection.Where(b => DeleteAccentAndSpecialsChar(b.name.ToUpper()).Contains(DeleteAccentAndSpecialsChar(searchBox.Text.ToUpper()))).ToList();
LayoutUpdateFlag = true;
}
这样,所有文字都显示在鞋面上,语调消失了。如果用户在他的文本上使用语调,那么什么都不会显示,但很适合我,因为上部文本不需要语调。