【问题标题】:Manipulation events not triggering on Templated Control [UWP]未在模板化控件上触发的操作事件 [UWP]
【发布时间】:2024-04-21 10:55:01
【问题描述】:

我正在尝试为 UWP 应用程序实现一个自定义控件(模板化控件)以转换形状(主要是矩形类型)。自定义控件将在 UWP 类库中实现并引用主项目。我想要实现的是围绕另一个基本形状(例如:矩形)绘制自定义控件,并根据对自定义控件所做的操作来转换形状。

我正在尝试使用操作事件(ManipulationDelta、ManipulationCompleted)来实现控件。

我能够使用与指针相关的事件(PointerPressed、PointerMoved、PointerReleased)实现类似的行为,但它不是很流畅,我想轻松地将这个控件与其他应用程序集成。

请查找sample source code here

当我尝试移动控件时,操作事件没有触发,我无法找出原因。

我最近开始研究 UWP 应用程序,非常感谢您对此事的任何帮助。

【问题讨论】:

    标签: xaml uwp custom-controls uwp-xaml template-control


    【解决方案1】:

    在您的场景中,PointPressed 事件中有几个删除代码,例如“RootCanvas.Children.Remove()”。当你移动控件时,PointPressed 事件被触发,之前生成的名为 resizableRectV2 的矩形被删除。所以resizableRectV2.ManipulationCompleted事件不会被触发。

    另外,我建议你不要创建两个完全重叠的矩形,这会让你感到困惑。

    更新:

    SpeakerView.xaml.cs:

    RootCanvas.Children.Remove(RootCanvas.Children.Where(x => x.GetType() == typeof(ResizableRectangle)).FirstOrDefault());
    

    我的意思是你可以在 OnPointerPressed 事件中删除上面的代码。

    【讨论】:

    • 非常感谢您花时间帮助我解决这个问题。你能解释一下吗?
    • 我已经更新了答案,请尝试一下。