2011-08-02 8 views
3

メインウィンドウに「ContentControl」というWPFアプリケーションがあり、ツリービュー、メニュー、およびデータグリッドがあります。 File-Openを実行すると、それらのファイルが読み込まれます。ショートカットキーの問題 - 時にはうまくいかない - フォーカスの問題?

私は約1日を費やして、キーバインドを動作させようとしました。バインディングはユーザーコントロールにありますが、メインウィンドウ(これは私が持っているシンプルなアプリケーション)に入れない限り、問題に陥る可能性がある(http://blogs.southworks.net/geoff/2011/03/15/wpfshortcutkeys/)と読んでいます。

今日、私はメインウィンドウにテストコマンドを入れました。それはちょっといいです - ショートカットは、アプリケーションを起動するときに機能しますが、File-Open(または他のアクション)を使用した後は機能しません。私は "Snoop"を使って、フォーカスがどの要素にも設定されていないことを知ることができます。動作していないときは "null"ですが、起動時には "null"です。

「スヌープ」は、ショートカットキーを押したときに[イベント]タブに何も表示されません。フォーカスがあるようにコントロールをクリックすると、イベントが再び表示されます。

これは、何かが焦点を得ているかのようです。

私は、メインウィンドウのテキストブックXAMLのビットを持っている -

<Window ... Height="400" Width="772" Focusable="False" IsTabStop="False"> 
    <Window.Resources> 
     <DataTemplate DataType="{x:Type vm:MainWindowContentViewModel}"> 
      <local:MainWindowContent/> 
     </DataTemplate> 
    </Window.Resources> 
    <Window.CommandBindings> 
     <CommandBinding Command="Close" 
     CanExecute="CloseCanExecute" 
     Executed="CloseExecuted" /> 
    </Window.CommandBindings> 

    <Window.InputBindings> 
     <KeyBinding Key="A" 
       Modifiers="Control" 
       Command="Close" /> 
    </Window.InputBindings> 

    <ContentControl x:Name="_contentControl"/> 
</Window> 

の背後にあるコードは、(インターネットのどこかでそれを切った!)も非常に退屈です。

private void HelpCanExecute(object sender, CanExecuteRoutedEventArgs e) 
{ 
    e.CanExecute = true; 
    e.Handled = true; 
} 

private void HelpExecuted(object sender, ExecutedRoutedEventArgs e) 
{ 
    MessageBox.Show("Hey, I'm some help."); 
    e.Handled = true; 
} 

のICommandのものを使用しますが、私はそれが焦点と同じ問題を持っているようなものを試してみて、簡単にするために、この簡単なヘルプコマンドを追加しました私の命令のほとんどで別の合併症があります。 (私はKeybinding a RelayCommandからコードを使用してそれを得る!)

何かヒント?

ありがとうございました。それがデフォルトtrueで、それがスタイル/のControlTemplateを持っていないので、それはフォーカスがあるとき、あなたは見ることができない -

ピーターは

+0

フォーカスを手動で設定しても問題ありませんか? – Code0987

+0

@Peter Smithson、ファイルダイアログを開いた後にthis.Focus()をWindow.xaml.csで実行した後に動作しましたか? –

答えて

0

私はContentControlに上IsTabstop = falseを設定します。

ContentControlには、プログラムの起動時にフォーカスがあるように見えます...

また、私は窓の上に偽Focusableの=を削除するだろう - それは、フォーカスどっちつかずの状態の原因である可能性があります。

0

質問にインラインで返信するように見えない - おそらく私がサインインする前に投稿したから!

@Runeアンデルセン

ことをしようとしました - 助けにはなりませんでした。違いは見られませんでした。

フォーカスは手動で設定できますか?

起動時に手動で1回設定してから、Ctrl-Oを初めて使用できます。その後、開いているファイルダイアログの後には機能しません。

ファイルダイアログを開いた後で、これを実行した後、Window.xaml.csのFocus()が機能しましたか?

私はそれを試していませんが、フォーカスを失ったあらゆる状況の後でこれを行う必要は本当にありません - 私はそれらのすべてを特定していません。おそらくそれは私がしなければならないことです - 少し貧しいようです。

ありがとうございました。

ピーター。

+0

最終的にこの問題の解決策を見つけましたか? – pbalaga

関連する問題