【问题标题】:Can I control the order click-events trigger in XAML?我可以控制 XAML 中的订单点击事件触发器吗?
【发布时间】: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 新手,在这里——这正是我所需要的。不知道每个“预览”事件都对应一个等效的非预览事件。谢谢!

标签: c# wpf xaml


【解决方案1】:

Some short and interesting read与主题相关。

Preview 在任何实际事件发生之前自然会被调用,所以它总是会在Click 之前被调用。

PreviewMouseLeftButtonUp 替换为MouseLeftButtonUp 可以让您的Button.Click 先采取行动。

此外,Button.Click 将阻止单击事件到达 MouseLeftButtonUp,这符合您的要求,但如果您确实需要它来到达它,这可能是一个问题。如果需要,请参阅 this question 以解决此问题。

【讨论】:

    猜你喜欢
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 2023-03-27
    相关资源
    最近更新 更多