2013-07-31 2 views
3

키보드 포커스를 스택 패널에 포함 된 텍스트 상자로 설정하려고합니다. IsEditMode가 true가되면 텍스트 상자에 기본적으로 초점을 맞추기를 원합니다.FocusManager.FocusedElement를 사용한 포커스 텍스트 상자

나는이 코드를 시도했다 :

<DataTemplate x:Key="LibraryItemTemplate"> 
<StackPanel Orientation="Vertical"> 
    <StackPanel.Style> 
     <Style TargetType="StackPanel"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsEditMode}" Value="True"> 
        <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=TxtB}"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </StackPanel.Style> 

    <TextBlock x:Name="TxtA" Text="A" /> 
    <TextBox x:Name="TxtB" Text="B" Visibility="{Binding IsEditMode, Converter={StaticResource BoolVisibilityCollapsed}}"/> 
</StackPanel> 
</DataTemplate> 
.... 
<ListView x:Name="LibraryListView" SelectedItem="{Binding SelectedItem, UpdateSourceTrigger=PropertyChanged}" > 
<ListView.View> 
    <GridView> 
     <GridViewColumn CellTemplate="{StaticResource LibraryItemTemplate}" Width="Auto"/> 
    </GridView> 
</ListView.View> 

을 그러나 문제는 마우스입니다 표시하지 않는 키보드 포커스가없는 텍스트 상자에 보인다 나는 다시 한 번을 마우스로 클릭해야 TextBox에서 TextBox를 입력 할 수있는 TextBox.

아이디어가 있으십니까?

+0

TxtB가 항상 보이면이 문제가 계속 발생합니까? (지금은 visbility 바인딩을 제거하십시오.) TxtB가 포커스를 맞추려고 할 때 아직 보이지 않는지 궁금합니다. 또한이 SO 게시물을 보셨나요? http://stackoverflow.com/questions/3109080/focus-on-textbox-when-usercontrol-change-visibility – Darlene

+0

Ok 가시성을 제거하고 작동하지만 여전히 어떻게 든 숨기고 IsEditMode가 false 인 경우 TextBlock을 표시해야합니다. 반대. 그렇다면이 기능을 구현하는 방법은 무엇입니까? – artos

+0

이 StackOverflow 게시물을 살펴보면 텍스트 상자가 표시 될 때 초점을 맞추는 방법에 대해 설명합니다. http://stackoverflow.com/questions/3109080/focus-on-textbox-when-usercontrol-change-visibility – Darlene

답변

2

FocusManager에 포커스를 설정 한 후이 이벤트를 처리해야하고 경우에 당신이 달린

<TextBox x:Name="TxtB" 
     Text="B" 
     GotFocus="TxtB_GotFocus" 
     Visibility="{Binding IsEditMode 
      , Converter={StaticResource BoolVisibilityCollapsed}}"/> 

.... 
private void TxtB_GotFocus(object sender, RoutedEventArgs e) 
{ 
    this.Dispatcher.BeginInvoke((Action)delegate 
    { 
     Keyboard.Focus(TxtB); 
    }, DispatcherPriority.Render); 
} 

덕분에 많이 추가해야 그리고 나는 나 자신에 의해 답을 추가 해요 셰리 던의 제안을 받아들입니다. 고마워요

관련 문제