

WPFにて、TextBoxのPreviewMouseDownイベント内でShowDialog()をすると、TextBoxをクリックしてもカーソルが合わなくなってしまいます。  
PreviewMouseDownイベント内でShowDialog()をした後はPreviewMouseUpイベントが発生しないことも確認しました。PreviewMouseDown後はTextBoxの動作が中断されているようです。

私がやりたいことは、TextBox.Focus()を使ってカーソルを合わせるというようなことではなく、PreviewMouseDownイベント内でShowDialog()をした後も通常のようにTextBoxを動作させてカーソルを合わせることです。  
つまり、通常のようにとは次のような動作です。

  1. TextBoxをクリック
  2. PreviewMoseDownイベントが発生し、ダイアログが開く
  3. ダイアログを操作しDialogResultを発生させメインウィンドウに返ってくる
  4. PreviewMouseUpイベントが発生する
  5. TextBoxにカーソルが合う

解決策が分かる方、どうかよろしくお願いいたします。

* * *

MainWindow.xaml

[code]

    <Grid>
        <TextBox Height="30" Width="200" PreviewMouseDown="TextBox_PreviewMouseDown"/>
    </Grid>
    
[/code]

MainWindow.xaml.cs

[code]

    namespace Sample
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void TextBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
            {
                new Dialog().ShowDialog();
            }
        }
    }
    
[/code]

Dialog.xaml

[code]

    <Grid>
        <Button Click="Button_Click"/>
    </Grid>
    
[/code]

Dialog.xaml.cs

[code]

    namespace Sample
    {
        public partial class Dialog : Window
        {
            public Dialog()
            {
                InitializeComponent();
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                DialogResult = true;
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2019-01-26T15:11:15.873
52342
2022-05-25T11:01:55.323
2021-01-21T00:54:45.573
3060
31939
question
c# wpf
TextBoxのPreviewMouseDownイベント内でShowDialog()をすると、TextBoxをクリックしてもカーソルが合わない


コードを書いて確認することはしていませんが、  
TextBox の PreviewMouseDown でダイアログを表示しているため  
PreviewMouseUp が発生する前に、ダイアログが表示されています。

ダイアログを閉じて元のフォームに戻った時点で  
マウスボタンは押されていない状態だと思うので  
PreviewMouseUp が発生しないのだと思います。

解決策は、PreviewMouseDown のイベントを利用するのではなくて  
PreviewMouseUp で、ダイアログの表示からその結果の処理もしてしまうことです。  
＊PreviewMouseUp だけだとユーザーの操作のタイミング次第で  
意図しないダイアログがでてしまうことになるので  
PreviewMouseDown と組み合わせたほうがいいですね。


CC BY-SA 4.0
2019-01-27T01:11:46.340
52347
2019-01-28T12:40:14.863
2019-01-28T12:40:14.863
31940
31940
52342
answer