Как обработать событие «Нажал» в шаблоне элемента управления «Кнопка Flex» в Xamarin Forms? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь создать пользовательский шаблон элемента управления для кнопки Flex. -NuGet Доступен здесь - , чтобы указать определенный c формат для кнопки. Проблема в том, что когда я создаю какой-либо шаблон для кнопки, все события не реагируют на обработчики, например, событие click никогда не срабатывает, если я не использую contentpresenter, который портит весь дизайн шаблона.

есть ли способ, которым я могу присоединить щелчок - и желательно все остальные события щелчка - без использования предъявителя контента?

Вот мой код шаблона на данный момент:

<Style TargetType="flex:FlexButton" x:Key="IconTextButton">
        <Setter Property="ControlTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <Grid BackgroundColor="{TemplateBinding Path=BackgroundColor}">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="30"/>
                            <ColumnDefinition Width="auto"/>
                            <ColumnDefinition Width="1"/>
                            <ColumnDefinition Width="auto"/>
                        </Grid.ColumnDefinitions>

                        <Label Grid.Column="0" FontSize="Title" HorizontalOptions="Center" TextColor="{TemplateBinding Path=ForegroundColor}" Text="{TemplateBinding Path=Icon}">
                            <Label.FontFamily>
                                <OnPlatform x:TypeArguments="x:String">
                                    <On Platform="Android">FontAwesome5Solid.otf#Font Awsome 5 Free Solid</On>
                                    <On Platform="iOS">Font Awsome 5 Free</On>
                                </OnPlatform>
                            </Label.FontFamily>
                        </Label>

                        <Label Grid.Column="1" FontSize="Subtitle" FontAttributes="Bold" TextColor="{TemplateBinding Path=ForegroundColor}" Text="│"/>

                        <Label Grid.Column="3" FontSize="Subtitle" FontAttributes="Bold" TextColor="{TemplateBinding Path=ForegroundColor}" Text="{TemplateBinding Path=Text}"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

И это Пример реализации:

<flex:FlexButton Icon="&#xf002;" Text="Explore" Style="{StaticResource IconTextButton}" Clicked="SampleButton_Clicked"/>

И хотя все выглядит хорошо, но SampleButton_Clicked никогда не выполняется.

Заранее спасибо.

1 Ответ

1 голос
/ 02 апреля 2020

Я не могу полностью воспроизвести ваш стиль. Видите ли вы Исследовать текст при отображении flex:FlexButton?

Я сделал тест, когда удаляю ваше событие style, Clicked или TouchedUp может быть выполнено в обычном режиме в тексте «Исследовать».

Исходя из моих исследований, Ваш стиль, как изображение для flex:FlexButton, я не вижу Explore text, поэтому я не могу щелкнуть по нему.

Но когда я добавил TapGestureRecognizer для flex:FlexButton, все заработало как обычно. Вот мой фоновый код.

  var tapGestureRecognizer = new TapGestureRecognizer();
            tapGestureRecognizer.Tapped += async (s, e) =>
            {
                await DisplayAlert("user", DateTime.Now.Year.ToString(),"Ok");
            };

  flexbtn.GestureRecognizers.Add(tapGestureRecognizer);

Вот код макета.

<flex:FlexButton Icon="&#xf002;" x:Name="flexbtn" Text="Explore" Style="{StaticResource IconTextButton}"  TouchedUp="FlexButton_Clicked" Clicked="FlexButton_Clicked"  />

Вот мой работающий GIF (я не могу полностью воспроизвести твой стиль, я стараюсь воспроизвести его, но все равно выглядит не очень красиво).

enter image description here

...