首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FocusManager.FocusedElement问题聚焦文本框

使用FocusManager.FocusedElement问题聚焦文本框
EN

Stack Overflow用户
提问于 2013-07-31 20:22:49
回答 1查看 7.1K关注 0票数 4

我正在尝试将键盘焦点设置为包含在堆栈面板中的文本框。当IsEditMode变为真时,我希望文本框在默认情况下成为焦点。

我试过这段代码:

代码语言:javascript
复制
<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中输入一些文本。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-01 15:57:26

在FocusManager设置焦点之后,您必须处理此事件,并且在事件中必须添加

代码语言:javascript
复制
<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);
}

非常感谢达琳

我要自己加上答案来满足谢里丹的建议,非常感谢

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17980224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档