ListBox的SelectionChanged事件第二次不起作用

时间:2014-08-15 01:44:41

标签: c# wpf xaml windows-phone-8 listbox

我正在尝试为我的应用程序设置一个设置列表,例如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字段的Lis​​tBox值更改为&#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;

}

2 个答案:

答案 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;
                }

            }
        }

通过这种方式,您可以避免两次点击同一项目等问题,等等。