在文本块中,是否可以通过触摸来选择特定的单词
本文关键字:选择 单词 触摸 可以通过 文本 是否 | 更新日期: 2023-09-27 18:20:34
在我的应用程序中,我有一个包含一些单词(如20或25)的TextBlock。我希望用户能够点击TextBlock中的一个单词,并在应用程序中检索它以使用它。
有人有主意吗?
我尝试过只读文本框。但我需要点击它3次来选择其中的一个单词,我不能对副本无所事事;粘贴功能。
提前谢谢。
简单答案:你不能
解决方法:使用重新样式的TextBox
,使其看起来像TextBlock
TextBox box= new TextBox();
box.Style = (Style)App.Current.Resources["CopyTextBlock"];
转到此处查看"CopyTextBlock"
样式。
和过载GotFocus
:
box.GotFocus += textBox_GotFocus;
带有:
private void textBox_GotFocus(object sender, RoutedEventArgs e)
{
TextBox txtBox = (TextBox)sender;
char[] strDataAsChars = txtBox.Text.ToCharArray();
int i = 0;
for (i = txtBox.SelectionStart - 1; ((i >= 0) && (strDataAsChars[i] != ' ')); --i) ;
int selBegin = i + 1;
for (i = txtBox.SelectionStart; ((i < strDataAsChars.Length) && (strDataAsChars[i] != ' ')); ++i) ;
int selEnd = i;
txtBox.Select(selBegin, selEnd - selBegin);
Console.WriteLine("'n" + txtBox.SelectedText);
}
GotFocus函数的源。
我对win 7编程没有任何具体的了解,但在WPF/winforms中,当文本框获得焦点时,我会捕捉光标的索引/位置,然后找到开始/结束/围绕该位置的单词,并选择该单词??很抱歉,如果这无关紧要,我只是想分享一下。
由于此功能在文本框控件中可用,您是否可以在文本框中显示文本块内容,并将其重新设置为类似文本块的样式-这样您就可以获得复制功能。
XAML Xnippet
<TextBox
Text="I am a textbox and my content is selectable"
TextWrapping="Wrap"
Width="400"
Height="100"
IsReadOnly="True"
Background="{StaticResource PhoneBackgroundBrush}"
Foreground="{StaticResource PhoneForegroundBrush}" />
似乎是解决方案的一部分。当控件处于活动状态时,您需要在VisualState中编辑控件的样式,但原则上这是可行的。
我认为敲击是TextBox
的一个属性,而不是其中的文本。因此,如果你想通过敲击来选择一个单词,我建议你为每个单词都有一个单独的文本框(如果你的应用程序允许的话)。如果你想要的话,你可以把它做成一个单独的文本框。
如果事先不知道单词的数量,则可以在每次添加新单词时以编程方式添加一个文本框。您可以将所有文本框放在水平(或垂直,以适合您的为准)列表中。因此,如果文本过长,则可以滚动。
只需使用VisualTreeHelper.FindElementsInHostCoordinates()将当前坐标传递给它。它将返回被该坐标击中的UI元素列表。为了确保TB在该列表中,您可能希望将Rect作为参数传递,在这种情况下,它将返回该Rect命中的UIElements的列表。
如果你想显示选定的状态等等,你必须通过视觉转换来确定文本的位置,并在文本上绘制Rect。