我正在尝试为我的应用程序设置一个设置列表,例如Windows Phone 8的“设置”页面。我使用ListBox来执行此操作。
我使用此代码打开所选选项:
<ListBox x:Name="lstConfigOptions"
SelectionMode="Single"
SelectionChanged="lstConfigOptions_SelectionChanged">
<ListBox.Items>
<ListBoxItem x:Name="login" >
<StackPanel Orientation="Horizontal" Margin="12,2,0,4">
<StackPanel Width="311" Margin="0,-7,0,0">
<TextBlock Text="login" TextWrapping="NoWrap" Margin="12,0,0,0"
Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="usuário, senha" TextWrapping="NoWrap" Margin="12,-6,0,0"
Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</StackPanel>
</ListBoxItem>
<ListBoxItem x:Name="about" >
<StackPanel Orientation="Horizontal" Margin="12,2,0,4" >
<StackPanel Width="311" Margin="0,-7,0,0">
<TextBlock Text="about" TextWrapping="NoWrap" Margin="12,0,0,0"
Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="version, authors" TextWrapping="NoWrap" Margin="12,-6,0,0"
Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</StackPanel>
</ListBoxItem>
</ListBox.Items>
</ListBox>
这在每个项目的第一次工作正常,但如果我尝试连续两次选择相同的项目,则无效!
示例:如果我选择&#34;登录&#34; item,登录选项页面打开。大!但是,如果我按下后退按钮并尝试再次打开&#34;登录&#34;项目,什么都没发生!事件不再被解雇。
我做错了什么? ListBox是我的问题的正确选择吗?
谢谢!
更新
将SelectedIndex字段的ListBox值更改为&#34; -1&#34;后,正常工作!谢谢@Rang
private void lstConfigOptions_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListBox lBox = (sender as ListBox);
ListBoxItem lbi = lBox.SelectedItem as ListBoxItem;
if (lbi != null && lbi.Name == "login")
{
Dispatcher.BeginInvoke(() =>
{
NavigationService.Navigate(new Uri("/Pages/ConfigLoginPage.xaml", UriKind.Relative));
});
}
lBox.SelectedIndex = -1;
}
答案 0 :(得分:2)
SelectionChanged仅在实际更改所选项目时触发。听起来你连续两次点击同一个项目。
答案 1 :(得分:2)
selectindex = -1
。
另外,我建议你这样做:
<强> XAML:强>
<ListBox x:Name="lbMenu" HorizontalAlignment="Left" Height="187" Margin="115,56,0,0" VerticalAlignment="Top" Width="209" MouseDoubleClick="ListBox_MouseDoubleClick">
<ListBox.Items>
<ListBoxItem Content="login" x:Name="login" >
</ListBoxItem>
<ListBoxItem Content="about" x:Name="about" >
</ListBoxItem>
</ListBox.Items>
</ListBox>
<强>码强>
private void ListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
ListBoxItem item = lbMenu.SelectedItem as ListBoxItem;
if(item != null)
{
switch (item.Name)
{
case "login":
MessageBox.Show("login");
break;
case "about":
MessageBox.Show("about");
break;
}
}
}
通过这种方式,您可以避免两次点击同一项目等问题,等等。