如何在Windows Phone 7中突出显示文本框中的文本

时间:2012-03-03 20:05:03

标签: silverlight windows-phone-7

在Windows Phone项目中,我有以下情况:

  1. 用户在文本框中键入一些文字
  2. 用户按下禁用文本框并启动流程的按钮
  3. 对文本进行了一些处理,并且在处理的每一步中我都要突出显示文本框中文本的某些部分(文本本身没有变化)。
  4. 处理完成后启用文本框。
  5. 这样做的正确方法是什么?

    目前我尝试设置一些选择背景并使用文本框选择方法设置所选文本,但即使启用了文本框,也没有选择的可视指示。 SelectedText属性返回正确的选定文本,但至少在模拟器中没有任何视觉上的变化。

    以下是我使用的代码不起作用: 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替换它,但我觉得应该有更简单的方法来实现这一点。

    那么实现此功能的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

如果您要突出显示一个实例,则可以使用SelectionStartSelectionLength属性。

如果必须突出显示多个实例,则可以使用RichTextBox替换TextBox,并通过适当设置样式来指示突出显示。这不允许您在编辑模式下显示突出显示。

如果您需要在编辑时启用文本突出显示,则需要创建自己的替换/替代TextBox。

答案 1 :(得分:0)

经过研究后我发现,如果TextBox具有焦点,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);
}

当我处理输入时,我使TextBox不可见,TextBlock可见。当用户提供输入时,我切换两个。我不确定这是否是正确的方法,我对其他解决方案持开放态度,但到目前为止,这是我发现的最简单的方法。