我见过有关WPF的类似问题,但是所提出的解决方案似乎都不适用于Windows Phone 7.
基本上,我有一个行为需要的列表框 1)当用户点击列表中的项目时,它被选中。 2)当用户点击任何其他项目时,第一个未被选中并且选中了被点击的项目(到目前为止这只是正常的单选列表框行为) 3)当用户点击已经选择的项目时,该项目“取消选择”(以便根本没有选定的项目)。
拦截MouseLeftButtonDown事件并清除选择当然很容易,但是ui系统似乎继续处理选项卡并转过来重新选择我刚刚取消选择的项目。
首先,我认为绑定可能是问题,列表项+ +绑定到observableCollection,但“selectedItem”或“selectedIndex”都没有绑定。
我尝试将事件args处理prop设置为true:
e.Handled = true
但没有变化。
有什么想法吗?
答案 0 :(得分:3)
使用MouseLeftButtonUp()而不是MouseLeftButtonDown()。
private object _selected;
private void ListBox_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
var list = (ListBox) sender;
if (list.SelectedItem == _selected)
{
list.SelectedIndex = -1;
_selected = null;
}
else
{
_selected = list.SelectedItem;
}
}