M.C*_*.C. 8 wpf xaml listview textbox datatemplate
所以我基本上有这个ListView,我想按Tab并迭代我的TreeViewItems(最好只我的TextBoxes)
<ListView>
<ListView.View>
<GridView>
<GridViewColumn Header="number" />
<GridViewColumn Header="Selector">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding SelectorName}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)
我看到的情况是在第一次按下选项卡后选择了整个第一个TreeViewItem并再次按Tab键选择了第一个TextBox.最后,第三个TAB从TreeView中移出到下一个Control,尽管还有更多TextBox我想在"Tabing"之前赶到下一个Control.Thankx
编辑:问题在这里得到解答: 如何通过ListView中的TextBox来选择
也许我错过了一些东西,但我找不到任何简单的方法来做到这一点,这里是你可以做什么的概述:
<ListView.InputBindings>
<KeyBinding Key="Tab" Command="{Binding GoToNextItem}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ListView}}" />
<KeyBinding Modifiers="Shift" Key="Tab" Command="{Binding GoToPreviousItem}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ListView}}" />
</ListView.InputBindings>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="Selected" Handler="ItemSelected" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="number" />
<GridViewColumn Header="Selector">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Name="_tb" Text="{Binding SelectorName}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
Run Code Online (Sandbox Code Playgroud)
我在这里做的事情:
代码:
<ListView.InputBindings>
<KeyBinding Key="Tab" Command="{Binding GoToNextItem}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ListView}}" />
<KeyBinding Modifiers="Shift" Key="Tab" Command="{Binding GoToPreviousItem}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ListView}}" />
</ListView.InputBindings>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="Selected" Handler="ItemSelected" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="number" />
<GridViewColumn Header="Selector">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Name="_tb" Text="{Binding SelectorName}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
Run Code Online (Sandbox Code Playgroud)
private readonly ICommand _GoToNextItem = new Command((p) =>
{
var lv = p as ListView;
if (lv.SelectedIndex == -1 || lv.SelectedIndex == lv.Items.Count - 1)
{
lv.SelectedIndex = 0;
}
else
{
lv.SelectedIndex++;
}
});
public ICommand GoToNextItem { get { return _GoToNextItem; } }
private readonly ICommand _GoToPreviousItem = new Command((p) =>
{
var lv = p as ListView;
if (lv.SelectedIndex <= 0)
{
lv.SelectedIndex = lv.Items.Count - 1;
}
else
{
lv.SelectedIndex--;
}
});
public ICommand GoToPreviousItem { get { return _GoToPreviousItem; } }
Run Code Online (Sandbox Code Playgroud)
这是非常粗略的,使用其中的任何部分需要您自担风险。(我认为,在不将选择带入其中的情况下,也可以以不同的方式进行聚焦)
(该类Command只是一个通用实现,ICommand它采用在接口Execute方法中执行的 lambda )