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

时间:2016-11-09 15:00:25

标签: c# wpf xaml

我有一个如此定义的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;码?

1 个答案:

答案 0 :(得分:0)

与该主题相关的

Some short and interesting read

sub2ind在任何实际事件发生之前自然被调用,因此它将始终在Preview之前被提升。

Click替换PreviewMouseLeftButtonUp可让您MouseLeftButtonUp先行动。

此外,Button.Click将阻止click事件进入MouseLeftButtonUp,这符合您的要求,但如果您确实需要它,则可能会出现问题。如果需要,请参阅this question以解决此问题。