【问题标题】:Listbox SelectionChanged event does not fire if there are 2 listboxes on the page如果页面上有 2 个列表框,则不会触发 Listbox SelectionChanged 事件
【发布时间】:2011-01-18 03:52:07
【问题描述】:

有没有人遇到过为什么如果页面上有两个列表框,则不会为任何一个列表框触发 SelectionChanged 事件?即使只有一个列表框,例如列表框下方的文本块,列表框 SelectionChanged 事件也不会触发。如果我删除第二个列表框或 TextBlock(在第一个列表框下方),第一个列表框 SelectionChanged 事件将触发。我什至尝试将第二个列表框放在自己的网格中,但仍然无法触发任何 selectionchanged 事件。有什么想法或解决方法吗?谢谢!

你好,很抱歉没有发布代码,所以在这里。

<!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <ListBox  Name="lbProps" Width="441" SelectionChanged="lbProps_SelectionChanged">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Name="spMain">
                            <Border BorderThickness="1" BorderBrush="white" >
                                <StackPanel Orientation="Vertical">
                                    <TextBlock Text="{Binding}"  Margin="5" Width="430"  FontSize="22"/>
                                </StackPanel>
                            </Border>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </Grid>
        <Grid x:Name="ContentPanel2" Grid.Row="2" Margin="12,0,12,0">
                <ListBox  Name="lbProp3" Width="441" SelectionChanged="lbProp3_SelectionChanged">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Name="spMain3">
                            <Border BorderThickness="1" BorderBrush="white" >
                                <StackPanel Orientation="Vertical">
                                   <TextBlock Text="{Binding}"  Margin="5" Width="430"  FontSize="22"/>
                               </StackPanel>
                            </Border>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </Grid>
    </Grid>

另一个重要的项目。我将列表框绑定到后面代码中的通用字符串列表。谢谢!

【问题讨论】:

  • 嗨,你能给我们看一个简单/独立的复制品吗?

标签: xaml windows-phone-7


【解决方案1】:

这一定是您正在做的事情,请出示您的代码。以下工作并表明可以将多个 SelectionChanged 事件连接到同一页面上的多个列表框

xaml:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <StackPanel>
        <ListBox SelectionChanged="ListBox1_SelectionChanged">
            <ListBoxItem Content="1 - A" />
            <ListBoxItem Content="1 - B" />
            <ListBoxItem Content="1 - C" />
            <ListBoxItem Content="1 - D" />
            <ListBoxItem Content="1 - E" />
            <ListBoxItem Content="1 - F" />
        </ListBox>

        <TextBlock Text="some text" />

        <ListBox SelectionChanged="ListBox2_SelectionChanged">
            <ListBoxItem Content="2 - A" />
            <ListBoxItem Content="2 - B" />
            <ListBoxItem Content="2 - C" />
            <ListBoxItem Content="2 - D" />
            <ListBoxItem Content="2 - E" />
            <ListBoxItem Content="2 - F" />
        </ListBox>
    </StackPanel>
</Grid>

cs:

private void ListBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show((e.AddedItems[0] as ListBoxItem).Content.ToString(), 
                    "List 1", MessageBoxButton.OK);
}

private void ListBox2_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show((e.AddedItems[0] as ListBoxItem).Content.ToString(),
                    "List 2", MessageBoxButton.OK);
}

更新

如果我将以下内容与您的 xaml 一起使用,我仍然无法重新创建它。

public MainPage()
{
    InitializeComponent();

    lbProps.ItemsSource = new ObservableCollection<String> { "one", "two", "three" };

    lbProp3.ItemsSource = new ObservableCollection<String> { "aaa", "bbb", "cccc" };
}

private void lbProps_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show(e.AddedItems[0].ToString(), "List 1", MessageBoxButton.OK); 
}

private void lbProp3_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show(e.AddedItems[0].ToString(), "List 2", MessageBoxButton.OK); 
}

使用上面的代码可以很好地处理您的 XAML,并且事件处理程序会显示相应的消息。

请展示一个完整的示例来说明问题。

【讨论】:

  • @sleeprince 即使使用您的 XAML,我也无法重新创建您做错的事情。查看更新的答案
  • 感谢您的代码示例。我能够使用您的代码而不是复制问题。我确实注意到您的列表框包含在 StackPanel 中,所以我做了同样的事情,瞧,它奏效了!所以,非常感谢!奇怪的是,如果我在您的示例中取出 StackPanel,它仍然可以正常工作。当然,它看起来很混乱,但是两个 SelectionChanged 事件都会触发……去看看。而且,再次,非常感谢你!
【解决方案2】:

我的感觉是,您的控件可能会以这样的方式重叠,以致事件无法到达您想要的控件。

如果没有看到这方面的复制品,很难提供比猜测更多的东西。

【讨论】:

  • 是的,前面有东西。
  • 您说得对,先生。我将两个列表框都放入 StackPanel 中,现在一切正常。感谢您的洞察力!
猜你喜欢
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多