トップ回答者
テキストボックス内の文字列の固定

質問
-
visual studio 2015使用
Outlookのメールアドレス入力欄(テキストボックス)において、入力されたメールアドレスが固定されているのを見ました。
例えば
[メールアドレス甲] ; hoge ; [メールアドレス乙]
というように入力されていたとき、下記のような動きをします。※以下、[甲]:[メールアドレス甲]
⇒[甲]の右側にキャレットがある時にバックスペースキーを押下すると[甲]ごと消える。
⇒[甲]の右側にキャレットがある時に左キーを押下するとキャレットが[甲]の左側に移動する
⇒[甲]をクリックすると[甲]が選択状態になる
⇒[甲]を右クリックするとコンテキストメニューが表示される。
⇒[甲]に下線が表示される。
⇒文字列「hoge」は上記の動きをしない。Visual Studio(またはWPF)を利用して再現するには、どのようなコードを書けばよいのでしょうか。
回答
-
こんにちは。
紹介されてるリンク先にも記載されてますが、
RichTextBoxを使う方向にはなると思います。<Window x:Class="WpfApplication6.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication6" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <RichTextBox> <FlowDocument> <Paragraph> <TextBlock TextDecorations="Underline" Text="メールアドレス甲;" /> <Run Text="hoge;" /> <TextBlock TextDecorations="Underline" Text="メールアドレス乙;" /> </Paragraph> </FlowDocument> </RichTextBox> </Window>
Outlookの場合であれば、メールアドレス欄からのロストフォーカス時にメールアドレスの検証等を行っているようですので
同じようなタイミングで上記のようにParagraphの中身を変更することになるでしょうか。あとは右クリックはParagraphのContextMenuが開くと思いますので、
HitTestなどで検証済みメールアドレスかどうかの判定などが必要かもしれません。- 回答としてマーク 指計算機 2016年3月12日 11:24
すべての返信
-
こんにちは。
紹介されてるリンク先にも記載されてますが、
RichTextBoxを使う方向にはなると思います。<Window x:Class="WpfApplication6.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication6" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <RichTextBox> <FlowDocument> <Paragraph> <TextBlock TextDecorations="Underline" Text="メールアドレス甲;" /> <Run Text="hoge;" /> <TextBlock TextDecorations="Underline" Text="メールアドレス乙;" /> </Paragraph> </FlowDocument> </RichTextBox> </Window>
Outlookの場合であれば、メールアドレス欄からのロストフォーカス時にメールアドレスの検証等を行っているようですので
同じようなタイミングで上記のようにParagraphの中身を変更することになるでしょうか。あとは右クリックはParagraphのContextMenuが開くと思いますので、
HitTestなどで検証済みメールアドレスかどうかの判定などが必要かもしれません。- 回答としてマーク 指計算機 2016年3月12日 11:24
-
ありがとうございます!
やはりTextBlockがリッチテキストに入るってことがポイントみたいですね。バックスペースで削除ができる例を出していただきありがとうございます。
実際の作業ではメールアドレスではなくもっと単純な文字に対してSpracheでの構文解析を絡めて
実装をするつもりです。
エンターキーをトリガーにしようかなとか考えています。
最後に「TextBlock」で検索をかけて見つけたリンクを張っておきます。
参考:文字列の一部を変更不可にしたい
https://social.msdn.microsoft.com/Forums/ja-JP/4cef486a-bea1-47be-974c-2b7436aded15?forum=wpfja