【发布时间】:2016-11-09 15:00:25
【问题描述】:
我因此定义了一个 XAML 列表视图,并在“PreviewMouseRightButtonUp”和“PreviewMouseLeftButtonUp”事件上定义了事件:
<ListView Name="lstItems" DockPanel.Dock="Top" >
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource ListViewItemStyle}">
<EventSetter Event="PreviewMouseRightButtonUp"
Handler="OnListViewItemPreviewMouseRightButtonUp" />
<EventSetter Event="PreviewMouseLeftButtonUp"
Handler="OnListViewItemPreviewMouseLeftButtonUp" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
我还有一个类 ObjRow,它继承自 UserControl,上面有一个按钮:
<DockPanel LastChildFill="True">
<Button Name="btnOpen" DockPanel.Dock="Left" BorderBrush="Transparent" Style="{StaticResource FolderButton}" IsTabStop="False"/>
</DockPanel>
最后,在列表视图的代码隐藏中,我调用了一个方法,在该方法中我在按钮的“单击”事件上设置了一个事件:
foreach (var obj_items in objs)
{
ObjRow item = new ObjRow();
item.btnOpen.Click += new RoutedEventHandler(btnOpen_Click);
controls.Add(item);
}
lstItems.ItemsSource = controls;
两个事件都按预期触发。以前,我没有“PreviewMouseLeftButtonUp”事件,所以左键单击按钮只会触发“Click”事件。但是,添加该事件后,左键单击按钮会触发两者——首先是列表视图中的“PreviewMouseLeftButtonUp”,然后是用户控件中的“单击”。
我正在寻找一种在单击按钮时忽略“预览”事件的方法,而只触发“单击”事件。有没有办法让这些不同的事件一起玩得很好?还是我需要另找地方放置“PreviewMouseLeftButtonUp”代码?
【问题讨论】:
-
如果有人在
ListView中点击Button,而您有一些与隧道鼠标点击相关事件相关的东西(我们不知道是什么),您会期待什么?您可以使用bubbling 事件,那么如果单击按钮,则不应获得MouseUp事件。 -
Some short and interesting read 与主题相关。
Preview自然是首先被调用的,所以也许你会想用标准的替代方法来替换它。 -
@Sinatr Total WPF 新手,在这里——这正是我所需要的。不知道每个“预览”事件都对应一个等效的非预览事件。谢谢!