Либо PoinerReleased, либо Command не срабатывает в пользовательском элементе управления - PullRequest
0 голосов
/ 27 мая 2020

Я создал настраиваемую кнопку, унаследованную от класса 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...