我有一个如此定义的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>
最后,在listview的代码隐藏中,我调用了一个方法,我在按钮上设置了一个事件&#34;点击&#34;事件:
foreach (var obj_items in objs)
{
ObjRow item = new ObjRow();
item.btnOpen.Click += new RoutedEventHandler(btnOpen_Click);
controls.Add(item);
}
lstItems.ItemsSource = controls;
这两件事都按预期发射。以前,我没有#34; PreviewMouseLeftButtonUp&#34;事件,所以左键单击按钮只会触发&#34;点击&#34;事件。但是,添加该事件后,左键单击该按钮会触发两者 - 首先是&#34; PreviewMouseLeftButtonUp&#34;从列表视图,然后&#34;点击&#34;来自UserControl。
我正在寻找一种方法来忽略&#34;预览&#34;单击按钮时的事件,仅触发&#34;单击&#34;事件而不是。有没有办法让这些不同的事件一起玩得很好?或者我是否需要找到另一个地方来放置&#34; PreviewMouseLeftButtonUp&#34;码?
答案 0 :(得分:0)
Some short and interesting read。
sub2ind
在任何实际事件发生之前自然被调用,因此它将始终在Preview
之前被提升。
Click
替换PreviewMouseLeftButtonUp
可让您MouseLeftButtonUp
先行动。
此外,Button.Click
将阻止click事件进入MouseLeftButtonUp,这符合您的要求,但如果您确实需要它,则可能会出现问题。如果需要,请参阅this question以解决此问题。