2017-01-19 3 views
0

UserControlのLostFocusイベントに問題があります。WPF LostFocus of UserControlが起動しない

ネット上でいくつかの解決策が見つかりましたが、私にとってはうまくいかないようです。

私のユーザーコントロールは、このような行動を持っています

<dxmvvm:EventToCommand PassEventArgsToCommand="True" 
         Command="{Binding LostFocusCommand}" 
         EventName="LostKeyboardFocus"> 
    <dxmvvm:EventToCommand.EventArgsConverter> 
     <dx:EventArgsToDataRowConverter /> 
    </dxmvvm:EventToCommand.EventArgsConverter> 
</dxmvvm:EventToCommand> 

コマンドだけフラグを設定します。

private void ExecuteLostFocusCommand(object obj) 
{ 
    var viewModel = obj as ITreeViewLeafViewModel; 
    if (viewModel != null) 
    { 
     viewModel.IsEditing = false; 
    } 
} 

私は別のユーザーコントロールをクリックしたとき、これは動作します。しかし、私が空のスペースをクリックすると、私はUserControlを保持しているウィンドウがフォーカスを取得し、私のUserControlがそれを失うことが予想される。しかし、私はウィンドウのためにFocusable="True"を設定したとしても、これは起こりません。

((Window) sender).Focus(); 

しかし、これも動作しません:私はまた、ウィンドウの MouseDownを処理し、そこにウィンドウをフォーカスしてみました。

誰かが間違っていることを知っていますか?

+0

は、あなたが同じウィンドウ内の別のフォーカス可能なコントロールを持っていますか:これはどのように? –

+0

はい、それをクリックすると、LostFocusが最初の要素に対して起動されます。 – user3292642

+0

それでは何が問題なのですか? 'Window.Focus'はフォーカスをウィンドウに設定し、最初のフォーカス可能なコントロールをフォーカスします。フォーカスを失うことができず、他のものに移されなければなりません。ウィンドウ自体の代わりに、フォーカスを得ることができるものを選択します。 –

答えて

1

、私はが積極的にフォーカスを失うことは非常に良いアイデアではありませんので、(あなたは完全に異なる、より根本的な問題を回避働いているように思える)異なっこれを解決推薦するが、あなた本当にはそれをしたい場合

(あなたWindow_MouseDownまたは任意にこのスニペットを入れて)

FocusManager.SetFocusedElement(this, null); 
Keyboard.ClearFocus(); 
関連する問題