gpt4 book ai didi

wpf - 制表位不适用于数据模板内的文本框

转载 作者:行者123 更新时间:2023-12-03 03:35:51 24 4
gpt4 key购买 nike

我正在编写一个非常简单的名称/值编辑器控件,其中值是可编辑的 - 左侧的标签和右侧的属性文本框。控件工作正常,只是当用户在右侧的“值”文本框之一内按 TAB 时,焦点将从我的控件转移到层次结构中的下一个控件。我希望焦点转到控件中的下一个文本框,以便用户可以在属性文本框之间进行切换。我尝试将“IsTabStop”设置为 true,但似乎不起作用。

这是我的数据模板:

    <DataTemplate x:Key="myDataTemplate">
<StackPanel>
<TextBlock Text="{Binding Name}" />
<TextBox IsTabStop="True" Text="{Binding Value, Mode=TwoWay}" />
</StackPanel>
</DataTemplate>

最佳答案

您是否使用数据模板作为项目容器类型控件的项目模板,例如列表框?查看KeyboardNavigation类,您可能希望将项目容器的 TabNavigation 属性设置为“继续”或“循环”,如下所示:

<ListBox x:Name="myListBox"
KeyboardNavigation.TabNavigation="Continue"
ItemTemplate="{StaticResource myDataTemplate}"
...

当使用列表框中的 Tab 键更改焦点时,焦点将从每个元素移动,当到达最后一个元素时,焦点将返回到“循环”的第一个元素,或者移动到表单上的下一个可聚焦控件,如果“继续”已设置。

希望这有帮助,问候

edit0:使文本框在选择列表框项目后立即获得焦点

<ListBox x:Name="myListBox"
KeyboardNavigation.TabNavigation="Continue"
ItemTemplate="{StaticResource myDataTemplate}"
SelectionChanged="testList_SelectionChanged"
...
/>
private void testList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, new ThreadStart(() =>
{
ListBoxItem item = testList.ItemContainerGenerator.ContainerFromIndex(testList.SelectedIndex) as ListBoxItem;
if (item != null)
{
TextBox textBox = GetDescendantTextBox(item) as TextBox;
if (textBox != null) textBox.Focus();
}
}));
}

public static Visual GetDescendantTextBox(Visual element)
{
if (element == null) return null;
if (element is TextBox) return element;
Visual result = null;
if (element is FrameworkElement)
(element as FrameworkElement).ApplyTemplate();
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
{
Visual visual = VisualTreeHelper.GetChild(element, i) as Visual;
result = GetDescendantTextBox(visual);
if (result != null) break;
}
return result;
}

关于wpf - 制表位不适用于数据模板内的文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1972420/

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