2014-10-28 4 views
0

사용자가 응용 프로그램을 탐색 할 때 다른 "페이지"또는 "보기"가 포함 된 다른 UserControls를로드하는 셸로 MainView (Window)가 있습니다.WPF InputBinding은 UserControl에서 집중 될 때까지 작동합니다.

ViewModel을 MainView의 Content 속성으로 설정하여보기를 변경했습니다. DataTemplate은 ViewModel에 따라 올바른보기를 선택합니다.

F1 키보드 바로 가기를 사용하여 현재 UserControl에서 명령을 트리거하고 싶습니다.

UserControl에 InputBindings를 추가하면 F1을 누르기 전에 UserControl에서 무언가를 선택해야합니다.

Window에 InputBindings를 추가하면 올바른 DataContext (ViewModel)가 없습니다. 난의 Content 속성에 CommandTarget 설정을 시도 뷰 모델

나는 또한 설정을 시도
<Window.InputBindings> 
    <KeyBinding Key="F1" CommandTarget="{Binding ElementName=ContentControl}" Command="{Binding ShowInfoCommand}" /> 
</Window.InputBindings> 

FocusManager.FocusedElement = "{ElementName을 = ContentControl을 바인딩}"UserControl을, 심지어 ContentControl을에 MainWindow를 포커스 가능한 =에 대한 사실 .

답변

0

여기서 좋은 해결책을 발견했습니다. at SOAdi Lester입니다. 그는 동작을 사용하여 UserControl에서 창으로 키 바인딩을 전파합니다

generic.xaml의 일반 contenttemplate에서 비헤이비어를 사용하는 경우 TemplateBinding이 아닌 TemplatedParent를 통해 명령을 바인드해야 함을 발견했습니다

<Border behaviors:InputBindingBehavior.PropagateInputBindingsToWindow="True"> 
    <Border.InputBindings> 
     <KeyBinding Key="F1" Command="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ShowInfoCommand}" /> 
    </Border.InputBindings> 
</Border> 
관련 문제