【发布时间】:2025-12-10 01:45:01
【问题描述】:
我有一个 UWP 应用,其中一个 RelativePanel“父级”包含另一个 RelativePanel“子级”。 它们都应该能够以不同的方式处理 PointerPressed 事件。
当我单击父级时,父级的 PointerPressed 事件处理程序被正确触发,但是当我单击子级时,再次仅触发父级的 PointerPressed 事件处理程序,因此子级的 PointerPressed 事件处理程序永远不会被调用。
如何配置子进程以调用其 PointerPressed 事件处理程序?
这是创建这些元素的代码摘录(一切都在后面的代码中完成,因为这些元素应该在运行时创建):
public class ChildView
{
public RelativePanel View { get; set; }
public ChildView()
{
View.Width = 18;
View.Height = 18;
View.SetValue(Canvas.ZIndexProperty, 30); // we want the child always on top of the parent
View.Background = new SolidColorBrush(Colors.Transparent);
// Add the gesture recognizers:
View.Holding += HandleLongPressGesture;
View.PointerPressed += HandleTapGesture;
View.PointerReleased += HandlePointerReleased;
View.DoubleTapped += HandleDoubleTapGesture;
}
public void HandleLongPressGesture(object sender, HoldingRoutedEventArgs e)
{
// my logic
}
private void HandlePointerReleased(object sender, PointerRoutedEventArgs e)
{
// my logic
}
private void HandleDoubleTapGesture(object sender, DoubleTappedRoutedEventArgs e)
{
// my logic
}
private void HandleTapGesture(object sender, PointerRoutedEventArgs e)
{
// my logic
}
}
public class ParentView
{
private ChildView child;
public RelativePanel View { get; set; }
public ParentView()
{
child = new ChildView();
View.Children.Add(child.View);
View.PointerPressed += HandleTapGesture;
View.PointerReleased += HandlePointerReleased;
}
private void HandlePointerReleased(object sender, PointerRoutedEventArgs e)
{
// my logic
}
private void HandleDoubleTapGesture(object sender, DoubleTappedRoutedEventArgs e)
{
// my logic
}
}
【问题讨论】:
-
你能分享你的 XAML 吗?
-
所有代码都在后面,因为这些元素必须在运行时创建,但我为该代码添加了摘要
标签: c# uwp event-handling mouseevent event-bubbling