20


4

フォーカスが合っていなくても、WPF TextBoxに選択範囲を表示したいのですが。 これどうやってするの?

5 Answer


27


私はこのソリューションをRichTextBoxに使用しましたが、標準のテキストボックスにも機能すると思います。 基本的には、LostFocusイベントを処理し、処理済みとしてマークする必要があります。

MyTextBox_LostFocus(object sender、RoutedEventArgs e){// RichTextBoxがフォーカスを失うと、ユーザーは選択を見ることができなくなります。 //これは、RichTextBoxがフォーカスを失うことはないと判断させるためのハックです。 e.Handled = true; }

TextBoxは、フォーカスが失われたことを認識せず、それでも強調表示された選択項目を表示します。

この場合はデータバインディングを使用していません。そのため、双方向バインディングが乱れる可能性があります。 LostFocusイベントハンドラで強制的にバインドする必要があります。 このようなもの:

Binding binding = BindingOperations.GetBinding(this、TextProperty); if(binding.UpdateSourceTrigger == UpdateSourceTrigger.Default || binding.UpdateSourceTrigger == UpdateSourceTrigger.LostFocus){BindingOperations.GetBindingExpression(this、TextProperty).UpdateSource(); }


10


もう1つの選択肢は、最初のTextBoxで選択を維持するためにXAMLで個別のフォーカススコープを定義することです。



2


パブリッククラスCustomRichTextBox:RichTextBox {protected override void OnLostFocus(RoutedEventArgs e){

}}


1


リストされている提案(LostFocusハンドラーを追加し、FocusScopeを定義する)が機能しないことがわかりましたが、ここにリストされているコードに出くわしました。 focus-on-wpf-textbox /は、フォーカスされていないときにテキストをハイライトするカスタムAdornerを作成します。


0


https://msdn.microsoft.com/ja-jp/library/system.windows.controls.primitives.textboxbase.isinactiveselectionhighlightenabled(v=vs.110).aspx[TextBoxBase.IsInactiveSelectionHighlightEnabled]プロパティは.NET Framework 4.5以降で使用可能です。

public bool IsInactiveSelectionHighlightEnabled \ {get;}セット; }