【问题标题】:On click event in GridViewGridView 中的单击事件
【发布时间】:2016-03-26 02:58:05
【问题描述】:

我有一个网格,我想添加 onclick 事件。

<ListView 
    HorizontalAlignment="Stretch"
    Margin="10"
    x:Name="BooksListView"
    GridViewColumnHeader.Click="SortBooks"
    >
    <ListView.View>
        <GridView></GridView>
    </ListView.View>
</ListView>

我已经尝试了这个SO question 接受的答案,但item.IsSelected 总是错误的。

<ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDown" />
        </Style>
    </ListView.ItemContainerStyle>

C#代码:

private void ListViewItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var item = sender as ListViewItem;
    if (item != null && item.IsSelected) // IsSelected is always false
    ...
}

我应该删除此检查,还是有更好的方法?

【问题讨论】:

  • 如果它对您的业务逻辑不重要,您可以删除此检查。
  • 如果需要,您可以将 item.IsSelected 设置为 true,但我怀疑该属性将在事件处理程序方法完成后立即设置。我绝对建议您使用 MouseLeftButtonDown、MouseDown 或 MouseLeftButtonUp 事件,而不是预览事件。选择项目是引发事件并执行处理程序的原因,因此您可以确信 IsSelected 将为真。只需摆脱该检查或使用非预览事件。我倾向于使用 MouseUp 事件,因此可以将鼠标拖离项目并在意外选择和项目时松开。
  • @Matt 答案对你有用吗?

标签: c# wpf listview gridview mouseclick-event


【解决方案1】:

这是一个预览事件,因此尚未到达项目以使其被选中。这就是为什么 item.IsSelected 总是为你返回 false。

更多信息请点击此处What are WPF Preview Events?

如果说您想在事件到达目标之前取消事件,则基本上会处理预览事件。处理“冒泡”类型的事件更为常见。也许你应该试试MouseLeftButtonDown。这里还有一点比较Difference between PreviewMouseLeftButtonDown and MouseLeftButtonDown WPF

【讨论】:

  • 这不是答案。
  • @TrevorClarke 已编辑以提供更多详细信息
猜你喜欢
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
相关资源
最近更新 更多