【发布时间】: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