总之,我遇到了在LostFocus (TextBox)事件之前调用SelectionChanged (TabControl)事件的问题。
这是一个问题,因为在选项卡更改期间触发SelectionChanged,该实习生将ListView.SelectedIndex (TabControl> TabItem> ListView)重置为-1。
文本框使用LostFocus来更新/验证它的textbox.text,它取决于SelectedIndex。文本框中的文本是从List<string>
存储/检索的,因为索引发生了变化,所以List恰好超出范围。
我环顾四周,厌倦了一些事情也是一种“hack-y”方法并没有真正帮助。
<TabControl SelectionChanged="SelectionChanged_Tab"
<TabItem .../>
<TabItem .../>
</TabControl>
<Grid>
<Label .../>
<TextBox Name="Name" LostFocus="Lost_Focus" .../>
</Grid>
代码:
private void SelectionChanged_Tab(object sender, SelectionChangedEventArgs e)
{
if (e.Source is TabControl)
{
ListView1.SelectedIndex = -1;
ListView2.SelectedIndex = -1;
}
}
private void Lost_Focus(object sender, RoutedEventArgs e)
{
TextBox textbox = sender as TextBox;
int Index = ListView.SelectedIndex;
if (string.IsNullOrEmpty(textbox.Text) || textbox.Text == "0")
{
textbox.Text = "0";
}
switch (textbox.Name)
{
case "Name":
SomeList[Index].AProperty = textbox.Text;
break;
}
}
答案 0 :(得分:0)
好的,所以在从不同的角度思考问题之后,我决定简单地制作TabControl,一个Focus-able事件,简单地让它在选择更改时集中注意力:
<TabControl SelectionChanged="SelectionChanged_Tab" Focusable="True"
<TabItem .../>
<TabItem .../>
</TabControl>
代码:
private void SelectionChanged_Tab(object sender, SelectionChangedEventArgs e)
{
if (e.Source is TabControl)
{
ListView2.Focus();
ListView1.SelectedIndex = -1;
ListView2.SelectedIndex = -1;
}
if (ListView2.SelectedIndex == -1)
{
ListView1.Focus();
}
}
我知道它不是最优雅的解决方案(在流程中或重新分解)但这似乎可以完成工作。