2011-08-02 96 views
3

我在主窗口中有一個「ContentControl」的WPF應用程序,它有一個樹形視圖,菜單和一個數據網格。當我做文件打開時它們被填充。快捷鍵問題 - 有時不工作 - 焦點問題?

我花了大約一天的時間試圖讓鍵綁定工作。綁定在用戶控件中,但我讀過(http://blogs.southworks.net/geoff/2011/03/15/wpfshortcutkeys/),除非您將它放在主窗口中(這是一個簡單的應用程序),否則您可能會遇到問題。

所以今天我在主窗口中放了一個測試命令。這有點更好 - 當我啓動應用程序但在使用File-Open(或其他操作)後,快捷方式會停止。我使用了「Snoop」,可以看到焦點沒有設置爲任何元素 - 當它不工作時它是「空」,但是在啓動時它也是「空」,當它工作時。

當我點擊快捷鍵時,「Snoop」在事件選項卡中沒有顯示任何內容。如果我點擊某個控件以使某個焦點處於焦點狀態,則該事件再次出現。

這就好像有東西得到了不應該的焦點。

我在主窗口中的一些文字書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的代碼來得到它!)

任何提示?

謝謝。

彼得

+0

手動設置聚焦手動嗎? – Code0987

+0

@彼得史密森,做了這個後,你打開文件對話框後,在Window.xaml.cs中的焦點()。 –

回答

0

我會成立IsTabstop =在ContentControl中虛假的 - 這是默認的真實,你看不到時,它已經關注,因爲它沒有一個款式/控件模板。

它看起來像ContentControl中有你的程序啓動時聚焦...

而且我會刪除調焦=窗口虛假 - 它會成爲焦點無人過問的原因。

0

似乎無法回答問題的內容 - 也許是因爲我在登錄之前張貼了!

@Rune安徒生

試過了 - 沒有幫助。看不出有什麼區別。

設置聚焦手動工作嗎?

我可以在啓動時手動設置一次,然後Ctrl-O第一次工作。然後在打開的文件對話框後它不起作用。

這樣做後,在打開文件對話框後做這個.Focus()Window.xaml.cs後?

我還沒有嘗試過,但我並不想在每次失去焦點的情況下都這樣做 - 我沒有確定它們。也許這就是我必須要做的 - 似乎有點差。

謝謝。

Peter。

+0

你終於找到了解決這個問題的方法嗎? – pbalaga