2012-03-03 60 views
0

在Windows Phone的項目,我有以下情形:如何突出顯示文本框的文本中的Windows Phone 7

  1. 用戶鍵入一些文字的文本框
  2. 用戶按下一個按鈕,關閉文本框並開始一個過程
  3. 對文本進行一些處理,並在處理的每一步中,我想突出顯示文本框中文本的某些部分(文本本身不會改變)。
  4. 處理完成後啓用文本框。

這樣做的正確方法是什麼?

目前我試圖設置一些選擇背景,並使用文本框選擇方法設置選定的文本,但即使啓用文本框,也沒有視覺指示選擇。 SelectedText屬性返回正確的選定文本,但至少在emulatior中沒有任何可視變化。

下面是我用不工作代碼: XAML

<TextBox Name="txtTest" AcceptsReturn="True" Height="250" TextWrapping="Wrap" SelectionBackground="Red"></TextBox> 
<Button Name="btnTest" Width="200" Click="btnTest_Click">Test</Button> 

代碼背後

private void btnTest_Click(object sender, RoutedEventArgs e) 
{ 
    txtTest.Select(1, 1); 
    //on this line SelectedText has the correct value 
} 

我打開其他的方法來做到這一點。我不是真的想使用這個選擇,因爲語義上這不是一個選擇,但我覺得這是實現我想要的最簡單的方法。我可以使用其他方法來突出顯示特定字符​​,例如使字體變大。我也可能隱藏文本框,並將其替換爲看起來相同的TextBlock,但我覺得應該有更簡單的方法來實現這一點。

那麼實現此功能的正確方法是什麼?

回答

0

經過一項研究後,我發現TextBox上的Select方法僅在文本框具有焦點時才提供可視指示。 TextBox在未被禁用時不能擁有焦點,因此對我來說沒有用處。 RitchTextBox是隻讀的,用於選擇文本部分的API比我使用的解決方案更復雜。

我用一個TextBlock用下面的代碼來突出顯示文本:

private void SetTextBlock(TextBlock textBlock, string text, int selectedIndex) 
{ 
    textBlock.Inlines.Clear(); 
    Run previous = new Run(); 
    previous.Text = text.Substring(0, selectedIndex); 
    Run current = new Run(); 
    current.Text = text.Substring(selectedIndex, 1); 
    current.Foreground = new SolidColorBrush(Colors.Green); 
    current.FontWeight = FontWeights.ExtraBold; 
    Run next = new Run(); 
    next.Text = text.Substring(selectedIndex + 1, text.Length - selectedIndex - 1); 
    textBlock.Inlines.Add(previous); 
    textBlock.Inlines.Add(current); 
    textBlock.Inlines.Add(next); 
} 

當我處理輸入我使文本框無形與文本塊中可見。當用戶提供輸入時,我切換兩個。我不確定這是否是正確的做法,我願意接受其他解決方案,但到目前爲止,這是我找到的最簡單的方法。

1

如果您有一個突出顯示的實例,則可以使用SelectionStartSelectionLength屬性。

如果您必須突出顯示多個實例,那麼您可以用RichTextBox代替TextBox,並通過適當的樣式來指示突出顯示。儘管如此,這不會讓您在編輯模式下顯示突出顯示。

如果您需要在編輯時啓用突出顯示的文本,您需要創建自己的替換/替代文本框。

+0

我不需要在編輯模式下突出顯示,但問題是,在使用Select方法或設置SelectionStart和SelectionLngth屬性後,手機模擬器中沒有可見的選擇指示。我需要以某種方式強制刷新嗎?我在我的問題中添加了代碼以顯示我目前正在執行的操作。 – Stilgar 2012-03-04 13:20:45

+0

@Stilgar如果我明確設置了SelectionStart和SelectionLength,而不是使用Select,它對我有用。 – 2012-03-05 22:15:05

+0

我試過這個,但看起來文本框應該有焦點,以便有可見的指示,當它被禁用時可悲的是不可能的:( – Stilgar 2012-03-05 22:22:14

相關問題