WPF TextBox.SelectAll()が機能しない
-
06-07-2019 - |
質問
プロジェクトで次のテンプレートを使用しました:
<DataTemplate
x:Key="textBoxDataTemplate">
<TextBox
Name="textBox"
ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"
Tag="{Binding}"
PreviewKeyDown="cellValueTextBoxKeyDown">
<TextBox.Text>
<MultiBinding
Converter="{StaticResource intToStringMultiConverter}">
<Binding
Path="CellValue"
Mode="TwoWay">
<Binding.ValidationRules>
<y:MatrixCellValueRule
MaxValue="200" />
</Binding.ValidationRules>
</Binding>
<Binding
RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type y:MatrixGrid}}"
Path="Tag"
Mode="OneWay" />
</MultiBinding>
</TextBox.Text>
</TextBox>
</DataTemplate>
このテンプレートを使用して、ユーザー用の編集可能なマトリックスを作成しました。ユーザーはマトリックス内のセル間を移動できます。選択したテキストボックスのデータを強調表示したいのですが、機能しません。 TextBox.Focus()およびTextBox.SelectAll()を呼び出して、効果を達成しましたが、何もしませんでした。フォーカス()は機能しますが、テキストは強調表示されません。
どんな助けでも歓迎し、感謝します。
解決
さて、誰かが興味を持っている場合、この問題の解決策は、イベントハンドラーメソッドに textBox.SelectAll()
および textBox.Focus()
が呼び出されます。
問題は、トンネリングイベントを処理するテキストボックスの PreviewKeyDown
イベントと、おそらく SelectAll()
および Focus()
呼び出しは、 e.Handled = true;
ステートメントを呼び出さずに無視されます。
誰かの助けになることを願っています。
他のヒント
残りのコードがなければ、これがうまくいくかどうかを言うのは困難ですが、DataTemplateを使用して小さなサンプルを作成しました(投稿されなかったコードを参照する部分を除く)。
GotFocusイベントハンドラーをDataTemplateのTextBoxに追加することで、テキストボックス内のすべてのテキストを選択できました。
<TextBox
...
GotFocus="textBox_GotFocus"
...>
...
</TextBox>
そして分離コード:
private void textBox_GotFocus(object sender, RoutedEventArgs e)
{
TextBox textBox = sender as TextBox;
if (textBox != null)
{
textBox.SelectAll();
}
}
(ボックスがフォーカスを受け取ったときではなく)さまざまな状況下ですべてを選択しようとしているかどうかを教えてください。
これは非常に優れた非常にシンプルなソリューションです(テンプレートで機能するかどうかはわかりませんが、試してみてください): http://social.msdn.microsoft.com/forums/en-US/wpf/thread/564b5731-af8a-49bf -b297-6d179615819f