Xamarin.CommunityToolKit TouchEffect.Command 无法在 UWP 中工作

Xamarin.CommunityToolKit TouchEffect.Command not working in UWP

我无法成功使 xct:TouchEffect. 命令在 UWP 上运行,同时:

我做了一个很小的项目来测试它:

  1. 在VS2019中开始一个新的手机APP项目

  2. 添加Xamarin.CommunityToolKit

  3. 在 Mainpage.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 项目。但是在 StackLayout 上应用的 touchEffect 的绑定不适用于 UWP 项目(当我单击 IndianRed 背景或 StackLayout 中的任何位置时)。

我错过了什么?!?有什么想法吗?

编辑:

我提到我知道这个 post: https://github.com/xamarin/XamarinCommunityToolkit/issues/1456

所以我目前的选择如下: Xamarin 版本 5.0.0.2012

我认为您需要 public getter 和 setter 才能使命令正常工作。这是我迄今为止的经验。尝试像这样在命令中添加 public 获取:

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

Xamarin.CommunityToolKit TouchEffect.Command not working in UWP

这是最新 CommunityToolKit 版本的已知问题,但它在早期版本中运行良好。

目前有一个回滚到 Xamarin.CommunityToolKit 版本 1.0.0 的解决方法。官方代码示例使用的版本是 1.0.0.

好的,我从 Xamarin.CommunityToolKit project here

上的 AndreiMisiukevich 那里得到了解决方案

为了让 ToolKit 运行 处于 UWP 发布模式(它已经按照标准在调试模式下工作),我必须在 UWP 项目的文件 App.xaml.cs 中添加这些行:

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

它适用于 CommunityToolKit 1.2.0 版和 Xamarin 5.0.0.2083。

事实上,当我使用 Rg.Plugins.Popup 时,我会像这样转换这些行:

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);

感谢大家的建议和 AndreiMisiukevich 的解决方案。