Ксамарин.Эффект касания CommunityToolKit.Команда не работает в UWP

#c# #xamarin.forms #uwp #command #windows-community-toolkit

Вопрос:

Я не могу добиться успеха в создании xct:TouchEffect.Команда, работающая над UWP, в то время как:

  • он работает для Android в том же проекте …
  • ошибки сборки или предупреждения нет

Я сделал очень маленький проект, чтобы протестировать его:

  1. Запустите новый проект мобильного приложения в VS2019
  2. Добавьте Xamarin.CommunityToolKit
  3. Добавьте два свойства на главную страницу.xaml.cs (хорошо, это можно было бы реализовать лучше, но это работает) :
      private int count = 10;
     public  int Count
     {
         get => count;
         set
         {
             count = value;
             OnPropertyChanged(nameof(Count));
         }
     }
    
     public ICommand PressedCommand => new Command ( () => Count   );
     
  4. Обновите файл MainPage.xaml следующим образом:
 <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
             x:Class="CommunityToolKit.MainPage"
             x:Name="this">

    <StackLayout>

        <Frame BackgroundColor="#2196F3" Padding="24" CornerRadius="0">
            <Label Text="Welcome to Xamarin.Forms!" HorizontalTextAlignment="Center" TextColor="White" FontSize="36"/>
        </Frame>
        <StackLayout BackgroundColor="IndianRed"
                     xct:TouchEffect.Command="{Binding Path=PressedCommand, Source={x:Reference this}}">
            <Label Text="Start developing now" FontSize="Title" Padding="30,10,30,10"/>
            <Label Text="Make changes to your XAML file and save" FontSize="16" Padding="30,0,30,0"/>
        </StackLayout>

        <Label Text="{Binding Path=Count, Source={x:Reference this}}" Padding="30" HorizontalOptions="Center"/>
        <Button Text="Click Me" Command="{Binding Path=PressedCommand, Source={x:Reference this}}"/>
    </StackLayout>

</ContentPage>
 

Привязка для команды кнопки работает как в проектах UWP, так и в проектах Android. Но привязка touchEffect, примененная к стекированию, не работает в проекте UWP (когда я нажимаю на темный фон или где-либо еще в стекировании).

Что я пропустил ?!? Есть идеи ?

Редактировать:

Я упоминаю, что мне известно об этом посте: https://github.com/xamarin/XamarinCommunityToolkit/issues/1456

Таким образом, мои варианты в настоящее время следующие: введите описание изображения здесьВерсия Xamarin 5.0.0.2012

Комментарии:

1. Это странно, тот же код работает в официальном примере кода здесь .

2. Да, это странно и скучно … Я сделал репозиторий GitHub с проектом github.com/BelightWavre/CommunityToolKit

3. пожалуйста, откатите версию 1.0, она может работать так, как и ожидалось. пожалуйста, просмотрите ответ на удар

4. Вы пробовали это сделать? работает ли это на вашей стороне с версией 1.0?

Ответ №1:

Я думаю, что вам понадобится публичный добытчик и установщик, чтобы команда работала должным образом. Таков был мой опыт до настоящего времени. Попробуйте добавить общедоступный get в свою команду, как это:

 public ICommand PressedCommand { get; } => new Command ( () => Count   );
 

Комментарии:

1. Я попытался сделать следующее : публичная команда ICommand нажала команду { get => новая команда(() =>> Count );}, но это ничего не меняет.

Ответ №2:

Ксамарин.Эффект касания CommunityToolKit.Команда не работает в UWP

Это проблема для последней CommunityToolKit версии, но она хорошо работает в более ранней версии.

В настоящее время существует обходной путь, который откатывается к Xamarin.CommunityToolKit версии 1.0.0. И официальный образец кода используется версия 1.0.0.

Комментарии:

1. Спасибо за ответ, я понизил рейтинг пакета до 1.0.0, но он пока не работает. Я обновляю свой образец на GitHub. Это так расстраивает … Что я пропустил ?!?

2. Я никогда ничего не читал об этом Xamarin. CommunityToolKit. Разметка. Что вы имеете в виду, добавляя «Xamarin. CommunityToolKit. Страница разметки (1.0.0)» ? Я добавил пакет Nuget во все проекты (UWP/Android). Тогда? Как на него ссылаться ?

3. просто добавьте его в проект forms. пожалуйста, обратитесь к этому документу

4. Да, я нашел кое-что, но не очень хорошее … С тем же проектом (и установленным пакетом Nuget, как описано здесь) он работает в режиме отладки, но не в режиме выпуска. К счастью, ошибка не сработала. Означает ли это/открывает ли что-то для вас ?

Ответ №3:

Хорошо, я получаю решение от Андреимисиукевича на Xamarin.Проект CommunityToolKit здесь

Чтобы инструментарий работал в режиме выпуска UWP (он уже работает в режиме отладки по стандарту), мне пришлось добавить эти строки в файл App.xaml.cs проекта UWP:

 var assembliesToInclude = new List<Assembly>() { typeof(Xamarin.CommunityToolkit.Effects.TouchEffect).GetTypeInfo().Assembly };
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
 

Он работает с версией 1.2.0 CommunityToolKit и Xamarin 5.0.0.2083.

На самом деле, как я использую Rg.Плагины.Всплывающее окно, я преобразую эти строки следующим образом:

 var assembliesToInclude = new List<Assembly>() { typeof(Xamarin.CommunityToolkit.Effects.TouchEffect).GetTypeInfo().Assembly };
assembliesToInclude.AddRange(Rg.Plugins.Popup.Popup.GetExtraAssemblies());
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
 

Спасибо всем за предложения и Андреимисюкевичу за решение.