【问题标题】:Get clicked element from ListBox in WPF从 WPF 中的 ListBox 获取单击的元素
【发布时间】:2012-01-08 17:02:50
【问题描述】:

我有一个带有数据模板的列表框

<Button Name="ButtonSortDate" Content="Date" Grid.Column="1" Click="ButtonSortDateClick" />
<Button Name="ButtonSortABC" Content="ABC.." Grid.Column="2" Click="ButtonSortABCClick" />
<!--ItemsSource="{Binding NotesCollection}"-->
<ListBox Name="ListBoxNotes" 
    Grid.Row="1" Grid.ColumnSpan="3"                             
    DoubleTap="DeleteDoubleTap">
    <ListBox.ItemTemplate>                            
        <DataTemplate>
            <StackPanel Margin="0,0,0,17" Width="432" Height="78" >
                <TextBlock Text="{Binding NoteText}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" />
                <TextBlock Text="{Binding Date}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我希望能够轻点列表中的一个项目以将其删除,但我找不到任何方法来获取单击的项目,只有选中的项目(并不总是相同)

例如,如果我点击列表中的第 1 项,然后轻按第二项,则 ListBox.SelectedItem 将是第一项。

如何获得第 2 项?如果我可以在模板中以某种方式在项目本身上放置一个事件会很好

【问题讨论】:

  • 你不是说“在Windows Phone 7上”吗?一方面,DoubleTap 在 WPF 中不存在……在 WPF 中,使用事件路由或EventSetters 会很容易,但我怀疑这些解决方案是否适用于 WP7。

标签: c# .net wpf xaml windows-phone-7


【解决方案1】:

e.OriginalSource 应该是项目中的某个元素(例如 TextBlocks 之一),它的项目为 DataContext,因此您应该能够像这样从源集合中删除该项目:

var item = (FrameworkElement)e.OriginalSource;
Data.Remove((MyItemType)item.DataContext);

【讨论】:

  • 很好,你有机会编辑这篇文章,以便我投票吗?点击错误:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多