uwp - PoinerReleased 或 Command 未在自定义控件中触发
问题描述
我创建了一个自定义按钮,继承自 ButtonBase 类。我为所有事件添加了故事板,例如 PointerPressed、PointerReleased、PointerEntered 和 PointerExited。在我将 Command & CommandParameter 属性添加到调用项目中的自定义按钮之前,它工作正常。我在我的自定义按钮控件中找到了这些属性,因为它是从 ButtonBase 类继承的。
但是如果我添加 e.Handled = true; 在 PointerPressed 事件中,命令属性有效,但 PointerReleased 的情节提要不会触发。如果我删除 e.Handled = true; 在 PointerPressed 事件中,命令属性不起作用,但 PointerReleased 的情节提要按预期和编程工作。为简单起见,我省略了 .cs 文件代码。只不过是调用相应故事板的事件。如何解决这个问题?
<ButtonBase
x:Class="CustomButtonWithMvvmCommand.Views.Usercontrols.BtnCust2.ButtonCust2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:CustomButtonWithMvvmCommand.Views.Usercontrols.BtnCust2"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400"
IsEnabled="True"
IsTapEnabled="True"
IsTabStop="True"
IsRightTapEnabled="False"
SizeChanged="GrdBase_OnSizeChanged">
<ButtonBase.Resources>
<Storyboard x:Name="StoryPointerEntered3" AutoReverse="False">
<DoubleAnimation Duration="00:00:0.10" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" To="0.92"/>
<DoubleAnimation Duration="00:00:0.10" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" To="0.97"/>
<DoubleAnimation Duration="00:00:0.10" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" To="0"/>
<DoubleAnimation Duration="00:00:0.10" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" To="0"/>
</Storyboard>
<Storyboard x:Name="StoryPointerExited3" AutoReverse="False">
<DoubleAnimation Duration="00:00:0.10" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" To="1"/>
<DoubleAnimation Duration="00:00:0.10" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" To="1"/>
<DoubleAnimation Duration="00:00:0.10" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" To="0"/>
<DoubleAnimation Duration="00:00:0.10" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" To="0"/>
</Storyboard>
<Storyboard x:Name="StoryPointerDown3" AutoReverse="False">
<DoubleAnimation Duration="00:00:0.05" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" To="0.82"/>
<DoubleAnimation Duration="00:00:0.05" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" To="0.9"/>
<DoubleAnimation Duration="00:00:0.05" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" To="0"/>
<DoubleAnimation Duration="00:00:0.05" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" To="0"/>
</Storyboard>
<Storyboard x:Name="StoryPointerUp3" AutoReverse="False">
<DoubleAnimation Duration="00:00:0.05" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" To="1.0"/>
<DoubleAnimation Duration="00:00:0.05" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" To="1.0"/>
<DoubleAnimation Duration="00:00:0.05" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" To="0"/>
<DoubleAnimation Duration="00:00:0.05" Storyboard.TargetName="GrdBase"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" To="0"/>
</Storyboard>
</ButtonBase.Resources>
<Grid x:Name="GrdBase"
Tapped="GrdBase_OnTapped"
RenderTransformOrigin="0.5,0.5"
VerticalAlignment="Center"
IsTapEnabled="True"
PointerPressed="ButtonBase_PointerPressed"
PointerReleased="ButtonBase_PointerReleased"
PointerCanceled="GrdBase_PointerCanceled"
PointerCaptureLost="GrdBase_PointerCaptureLost"
PointerEntered="ImgBack_OnPointerEntered"
PointerExited="ImgBack_OnPointerExited"
Background="Transparent">
<Grid>
<!--some controls-->
</Grid>
<Grid.RenderTransform>
<CompositeTransform/>
</Grid.RenderTransform>
</Grid>
</ButtonBase>
解决方案
推荐阅读
- tensorflow - 机器学习:Tensorflow v/s Tensorflow.js v/s Brain.js
- c - C中中缀的前缀
- javascript - 什么是 Dojo treegrid 展开/折叠事件?
- angular - 为什么列出的泛型函数已经在打字稿上覆盖了自己
- android - ArgumentCaptor 捕获错误的类
- c++ - 哪一个是最好的方法类或结构?在 C++ 中
- python - Scikit 学习和数据集分析
- c++ - 如何在c ++中确定tcp客户端是否连接
- python - 在列表中查找不是其自身值的单个单词位置
- python - 来自 Anaconda 的 Python 3.6 Spyder IDE