在Windows Phone项目中,我有以下情况:
这样做的正确方法是什么?
目前我尝试设置一些选择背景并使用文本框选择方法设置所选文本,但即使启用了文本框,也没有选择的可视指示。 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替换它,但我觉得应该有更简单的方法来实现这一点。
那么实现此功能的正确方法是什么?
答案 0 :(得分:1)
如果您要突出显示一个实例,则可以使用SelectionStart
和SelectionLength
属性。
如果必须突出显示多个实例,则可以使用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可见。当用户提供输入时,我切换两个。我不确定这是否是正确的方法,我对其他解决方案持开放态度,但到目前为止,这是我发现的最简单的方法。