我可以在XAML中控制订单点击事件触发器吗?

本文关键字:事件 触发器 单点击 XAML 控制 我可以 | 更新日期: 2023-09-27 18:17:03

我有一个这样定义的XAML listview,事件定义在"PreviewMouseRightButtonUp"answers"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的代码后面,我调用了一个方法,我在按钮的"Click"事件上设置了一个事件:

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"事件。然而,添加了这个事件后,左键点击按钮会同时触发——首先是listview中的"PreviewMouseLeftButtonUp",然后是UserControl中的"Click"。

我正在寻找一种方法来忽略"预览"事件时,按钮被点击,只触发"点击"事件,而不是。有没有一种方法可以让这些完全不同的事件和谐相处呢?或者我需要找到另一个地方把"PreviewMouseLeftButtonUp"的代码?

我可以在XAML中控制订单点击事件触发器吗?

与主题相关的一些简短有趣的读物

Preview自然在任何实际事件发生之前被调用,因此它总是在Click之前被引发。

MouseLeftButtonUp代替PreviewMouseLeftButtonUp可以让你的Button.Click先行动。

此外,Button.Click将阻止单击事件到达MouseLeftButtonUp,这与您的要求是充分的,但如果您实际上需要它到达它可能是一个问题。如果需要,请参阅此问题来修复此行为。