gpt4 book ai didi

wpf - 使用 FocusManager.FocusedElement 问题的焦点文本框

转载 作者:行者123 更新时间:2023-12-01 02:24:11 28 4
gpt4 key购买 nike

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

我试过这个代码:

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

但问题是鼠标没有标记似乎键盘焦点不在文本框中,我必须再次用鼠标单击文本框才能在文本框中输入一些文本。

任何的想法?

最佳答案

在 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);
}

非常感谢达琳

我自己添加了答案以满足谢里丹的建议
非常感谢

关于wpf - 使用 FocusManager.FocusedElement 问题的焦点文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17980224/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com