Я создал настраиваемую кнопку, унаследованную от класса ButtonBase. Я добавил раскадровки для всех событий, таких как PointerPressed, PointerReleased, PointerEntered и PointerExited. Он работает нормально, пока я не добавлю свойства Command и CommandParameter к моей настраиваемой кнопке в вызывающем проекте. Я нахожу эти свойства в своем настраиваемом элементе управления «Кнопка», поскольку он унаследован от классов ButtonBase.
Но если я добавлю e.Handled = true; в событии PointerPressed свойство command работает, но раскадровка для PointerReleased не срабатывает. Если я удалю e.Handled = true; в событии PointerPressed свойство command не работает, но раскадровка для 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>