2009-04-21 3 views
1

어떻게 MVVM에서 사용자 정의 컨트롤 포커스를 설정합니까? FocusManagerager.FocusElement = {Binding ...} 사용 영향을주지 않습니다.WPFMVVM 포커스 제어

<DataTemplate DataType="{x:Type client:TelephoneNumberViewModel}"> 
    <Grid FocusManager.FocusedElement="{Binding ElementName=TelephoneNumber}" Width="1024" Height="540"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="60" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="80" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="25" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 

     <TextBlock Margin="0 25 0 0" HorizontalAlignment="Left" Grid.Row="0" Grid.Column="1" 
      Grid.ColumnSpan="7" Name="textBlockQuestion" 
      TextWrapping="Wrap" Style="{DynamicResource TitleTextBlock}">"What is your telephone number?"</TextBlock> 

     <Grid Grid.Column="1" Grid.Row="1" Grid.RowSpan="7" 
      Grid.ColumnSpan="7" Height="460"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="170" /> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="80" /> 
       <RowDefinition Height="80" /> 
       <RowDefinition Height="80" /> 
       <RowDefinition Height="80" /> 
       <RowDefinition Height="100" /> 
      </Grid.RowDefinitions> 

      <StackPanel Grid.Row="0" Grid.RowSpan="5" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Top" HorizontalAlignment="Left"> 
       <wpfclient:TelephoneBox Name="TelephoneNumber" TelephoneNumber="{Binding PhoneNumber, Mode=TwoWay}" /> 
       <!--<TextBox Width="500" VerticalAlignment="Top" HorizontalAlignment="Left" FontSize="40" TextAlignment="Center" Text="{Binding PhoneNumber}"></TextBox>--> 

       <StackPanel Orientation="Horizontal" Margin="0 40 0 0"> 
        <StackPanel Orientation="Vertical" Margin="0 0 60 0" > 
         <Button Margin="0 0 0 20" Style="{DynamicResource LargeGlossyButtonStyle}" Command="{Binding SurveyMobileCommand}">Mobile</Button> 
         <Button Style="{DynamicResource LargeGlossyButtonStyle}" Command="{Binding SurveyHomeCommand}">Home</Button> 

        </StackPanel> 
        <StackPanel Orientation="Vertical"> 
         <Button Margin="0 0 0 20" Style="{DynamicResource LargeGlossyButtonStyle}" Command="{Binding SurveyWorkCommand}">Work</Button> 
         <Button Style="{DynamicResource LargeGlossyButtonStyle}" Command="{Binding SurveyOtherCommand}">Other</Button> 
        </StackPanel> 
       </StackPanel> 



      </StackPanel> 


     </Grid> 



     <Grid Width="1024" Height="80" Grid.Row="7" Grid.Column="0" Grid.ColumnSpan="8" VerticalAlignment="Bottom"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <Button Margin="60 0 0 20" Grid.Column="0" Grid.Row="0" Name="buttonContinue" 
        Command="{Binding SurveySkipCommand}" Style="{DynamicResource LargeGlossyButtonStyle}" 
        >Skip</Button> 
     </Grid> 



    </Grid> 
</DataTemplate> 

사용자 컨트롤 한번 아직도 내가 탭까지 포커스를 취득하지 않습니다

여기 내 XAML입니다.

답변

1

FocusManager.FocusedElement을 사용하십시오.

편집 후 편집 : 전체 코드를 보지 않고도 말할 수는 없지만 이것이 포커스 범위 지정 문제 일 수 있다고 생각합니다. 전화 컨트롤에 논리적 초점을 설정하고 있지만 논리적 범위가 활성이면 키보드 포커스 만 있습니다. 템플릿이되는 컨트롤 외부의 무언가가 자체 포커스 범위를 갖고 있으며 범위가 UserControl로 이동하는 탭을 누르기 전까지는 그렇지 않은 것으로 의심됩니다.

+0

내 업데이 트를 참조하십시오 있는지 확인하십시오. FocusManager.FocusedElement를 배치하는 전화 상자가 포커스를 얻지 못합니다. – cjibo

0

포커스의 컨텍스트는 무엇입니까? 컨트롤에 탭 이동합니까? 새 항목이 추가되면 컨트롤이 포커스를 받고 있습니까?

후자의 경우, DataTemplate을가있는 목록 상자가 IsSynchronizedWithCurrentItem이 = "참"

+0

Viewmodel이로드 될 때의 기준은 TelephoneBox가 입력에 초점을 맞추기를 원합니다. ViewModel이 영역으로 설정되도록 프리즘을 사용하고 있습니다. – cjibo

+0

부모 요소를 살펴볼 필요가있을 수 있으며 포커스가있는 부모 UserCOntrol 인 경우 부모 컨트롤에 Focusable = "False"가 있는지 확인해야합니다. Prism이 부모를 선언하는 방법을 모를 수 있습니다. 코드 백에서 찾을 수없는 경우 초점을 얻는 방법을 보려면 두더지를 사용하는 것이 좋습니다. http://karlshifflett.wordpress.com/mole-for-visual-studio/ –