【问题标题】:Button on ListBox Item列表框项上的按钮
【发布时间】:2012-07-27 16:36:51
【问题描述】:

我有一个列表框,里面装满了项目。一些项目可能在 RichTextBlock 内部有按钮或链接。我想在按下项目或按下按钮时触发不同的动作。问题是当我按下按钮时,与项目本身相关的动作也会被触发。按下内部按钮时如何防止触发列表项事件?

列表框:

<ListBox x:Name="StripesList" SelectionChanged="StripesList_SelectionChanged">
</ListBox>

列表框项:

<Border x:Name="OuterBorder" Width="400">
    <Image x:Name="ThumbnailBox" Width="100" Source="{Binding Thumbnail}" Tap="ThumbnailClick" />
</Border>    

代码:

private void StripesList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (StripesList != null)
    {
        StripesList.SelectedIndex = -1;
    }
}

private void ThumbnailClick(object sender, System.Windows.Input.GestureEventArgs e)
{
    Image image = sender as Image;
    // handle image click
}

private void ItemClick(object sender, EventArgs e)
{
    // handle item click
}

我从后面的代码中注册了项目点击事件观察者:

item.Tap += new EventHandler(ItemClick);

【问题讨论】:

  • 能否在问题中包含 ListBox 的 XAML 和事件代码?

标签: wpf listbox richtextbox


【解决方案1】:

在所有事件的处理程序中设置 e.Handled=true 。它将停止事件的冒泡。

【讨论】:

  • 好的,它适用于图像。但我也希望对 RichTextBox 中的超链接具有相同的效果,并且它触发的 RoutedEventArgs 没有 Handled 属性(对于 WP7)
  • 我不知道,在这种情况下,在您的处理程序的开头检查源,如在 ListBox 处理程序中检查 e.Source 是否为 Button 然后返回或者如果它是 ListBox 然后继续。
  • 太棒了!它有效,我可以使用 .OriginalSource 属性确定您所说的来源。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多