2013-07-31 5 views
3

Я пытаюсь настроить фокус клавиатуры на текстовое поле, которое входит в стеке. Когда IsEditMode становится истинным, я хочу, чтобы текстовое поле стало, по умолчанию, сфокусированным.Фокус Текстовое поле с использованием FocusManager.FocusedElement issue

Я попробовал этот код:

<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.

Любая идея?

+0

У вас все еще есть эта проблема, если TxtB всегда виден? (Удалите привязку visbility на данный момент.) Мне интересно, если TxtB еще не виден, когда вы пытаетесь сфокусировать его. Также вы видели эту публикацию? http://stackoverflow.com/questions/3109080/focus-on-textbox-when-usercontrol-change-visibility – Darlene

+0

Хорошо, я удаляю видимость, и это работает, но все же мне нужно как-то скрыть его и показать TextBlock, если IsEditMode является ложным и противоположный. Итак, как реализовать эту функциональность? – 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); 
} 

Большое спасибо Дарлин

И я добавляю ответ сам к см. предложение Sheridan Большое спасибо

Смежные вопросы