2011-08-02 4 views
3

주 창에 "ContentControl"이있는 WPF 응용 프로그램이 있으며 트리 뷰, 메뉴 및 데이터 격자가 있습니다. File-Open 할 때 채워집니다.바로 가기 키 문제 - 때때로 작동하지 않음 - 초점 문제가 있습니까?

키 바인딩 작업을 시도하는 데 약 하루를 보냈습니다. 바인딩은 사용자 정의 컨트롤에 있지만 당신이 주 창에 넣지 않으면 문제가 될 수있는 (http://blogs.southworks.net/geoff/2011/03/15/wpfshortcutkeys/)을 읽었습니다 (이것은 제가 갖고있는 간단한 응용 프로그램입니다).

그래서 오늘 주 창에 테스트 명령을 입력했습니다. 조금 더 좋습니다. 바로 가기는 앱을 시작할 때 작동하지만 파일 열기 (또는 다른 작업)를 사용한 후에는 멈 춥니 다. 나는 "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을 얻습니다.)

힌트 : 어떤 힌트가 있습니까?

감사합니다. 이 기본 사실과는 스타일/ControlTemplate이 없기 때문에 포커스가있을 때 볼 수 없습니다 -

베드로는

+0

포커스 수동 설정이 작동합니까? – Code0987

+0

@Peter Smithson, 파일 대화 상자를 연 후 Window.xaml.cs에서 this.Focus()를 수행 한 후에 작동 했습니까? –

답변

0

나는 ContentControl을에 IsTabstop = false를 설정합니다. 그것은 ContentControl을 보이는

또한 나는 창에 초점 설정 = false를 제거하는 것입니다 ... 당신의 프로그램이 시작할 때 포커스가 - 그것은 초점 림보의 원인이 될 수 있습니다.

0

질문에 인라인으로 대답하지 않는 것 같습니다. 아마도 로그인하기 전에 게시했기 때문입니다!

@Rune 안데르센

는 그것을 시도 - 도움이되지 않았다. 어떤 차이도 볼 수 없었습니다.

포커스 수동 설정이 작동합니까?

시작시 수동으로 한 번 설정할 수 있으며 처음으로 Ctrl-O가 작동합니다. 그런 다음 열린 파일 대화 상자에서 작동하지 않습니다.

파일 대화 상자를 연 후이 .Focus()를 Window.xaml.cs에서 실행 했습니까?

나는 그것을 시도하지는 않았지만 포커스를 잃은 모든 상황에서이 작업을 수행하고 싶지는 않습니다. 모든 것을 확인하지 못했습니다. 아마 그것이 내가해야 할 일이다. 약간 가난한 것 같다.

감사합니다.

피터.

+0

마침내이 문제에 대한 해결책을 찾았습니까? – pbalaga