2012-01-18 6 views
3

私のアプリケーションでは、いくつかの単語(20または25など)を含むTextBlockがあります。私は、ユーザーがTextBlockの単語をタップして、それをアプリケーションで検索して後で使用できるようにしたい。TextBlockでは、特定の単語をタッチして選択することはできますか?

アイデアはありますか?

私はテキストボックスを読み込み専用で試しました。しかし、私はそれを単語を選択する3回のようにそれをタップする必要がありますとコピー&貼り付け機能で何もすることはできません。

ありがとうございます。

答えて

4

単純な答え:あなたの周り

動作することはできません:"CopyTextBlock"スタイルにTextBlock

TextBox box= new TextBox(); 
box.Style = (Style)App.Current.Resources["CopyTextBlock"]; 

ゴーhereのように見えるようにTextBox再スタイルを使用します。

および過負荷GotFocus

box.GotFocus += textBox_GotFocus; 

と:の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); 
} 

Source

1

タッピングは、TextBoxのプロパティで、内部のテキストではないと思います。だから、それをタップして単語を選択できるようにしたいのであれば、単語ごとに別々のテキストボックスを用意することをお勧めします。あなたが望むなら、それを単一のテキストボックスのように見せることができます。

単語の数があらかじめわかっていない場合は、新しい単語が追加されるたびにプログラムでテキストボックスを追加できます。すべてのテキストボックスを水平(または垂直)のリストにすることができます。したがって、テキストが長すぎる場合はスクロールすることができます。

+0

それはアイデアかもしれませんが、私はパフォーマンスが多くのTextBlocksで落ちると思います。私は1つのスクロールビューでそれぞれ25語の10 TextBlockのようなものを持つことができます... – Mualig

2

WPF/winformsでは、テキストボックスにフォーカスが当たったときにカーソルのインデックス/位置を取得してから、開始/終了/囲む単語を見つけることができますその単語を選択して位置付ける申し訳ありませんが、これは無関係な場合、私は共有すると思った。

+0

+1私はそれがカーソルのインデックスを取得することはできませんでした。 – Divya

+0

SelectionStartプロパティ??私は間違っているかもしれませんが、私は7つのプログラミングに勝つために座ったことはないと言いますが、それについての手掛かりはありません。 –

+0

SelectionStartなどがTextBox用です。私はTextBlockを使ってテキストを表示しますが、そのようなプロパティはありません。 – Mualig

0

VisualTreeHelper.FindElementsInHostCoordinates() を使用すると、現在の座標が渡されます。 その座標でヒットしたUIElementsのリストを返します。 TBがそのリストにあることを確認するには、Rectをパラメータとして渡すことをお勧めします。その場合、そのrectでヒットしたUIElementsのリストを返します。

選択した状態などを表示したい場合は、ビジュアルトランスフォームによってテキストの位置を決定し、テキストの上にRectを描画する必要があります。

2

この機能はテキストボックスコントロールで使用できるため、テキストボックスにテキストブロックの内容を表示し、テキストブロックのように見せかけることができますか?コピー機能を取得する必要があります。

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のスタイルを編集する必要がありますが、基本的にはこれが機能します。

関連する問題