gpt4 book ai didi

c# - 将焦点集中到扩展器内的组件

转载 作者:行者123 更新时间:2023-12-02 14:24:33 25 4
gpt4 key购买 nike

我有这样的要求,当用户按下选项卡时,我需要将第一个元素聚焦在扩展器内。

当前(默认行为)焦点转到扩展器,我尝试通过在扩展器中创建焦点事件处理程序来聚焦扩展器的第一个元素,如下所示:

private void ExpanderGotFocus(object sender, RoutedEventArgs e)
{
var expander = (Expander) sender;

if (!expander.IsExpanded)
{
expander.IsExpanded = true;
this._someText.Focus();
}
}

这不起作用。

我还尝试将焦点放在下一个元素上:

var tRequest = new TraversalRequest(FocusNavigationDirection.Next);
var keyboardFocus = Keyboard.FocusedElement as UIElement;
keyboardFocus.MoveFocus(tRequest);

但仅在第二次有效(当扩展器至少打开一次时)

我试图将这个和其他一些疯狂的想法放在一个线程中。

如何将焦点集中到扩展器内部的第一个元素? (扩展器第一次关闭时)

最佳答案

我尝试了多种方法,但没有一个起作用,基本上问题是当扩展器扩展(到早期)时,文本框仍在呈现。

因此,我发现将 IsVisibleChanged 事件添加到文本框,以便当扩展器完成时,文本框变得可见并请求焦点

XAML

<Expander GotFocus="ExpanderGotFocus">
<Expander.Header>
<TextBlock Text="{x:Static Client:Strings.XYZ}" />
</Expander.Header>
<Expander.Content>
<StackPanel>
<TextBox IsVisibleChanged="ControlIsVisibleChanged" Name="txtBox" />
</StackPanel>
</Expander.Content>
</Expander>

隐藏代码

private void ExpanderGotFocus(object sender, RoutedEventArgs e)
{
var expander = (Expander) sender;

if (!expander.IsExpanded )
{
expander.IsExpanded = true;
}
}

private void ControlIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
Keyboard.Focus((IInputElement)sender);
}

关于c# - 将焦点集中到扩展器内的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10806570/

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