Xamarin.CommunityToolKit TouchEffect.Command 在 UWP 中不起作用
Posted
技术标签:
【中文标题】Xamarin.CommunityToolKit TouchEffect.Command 在 UWP 中不起作用【英文标题】:Xamarin.CommunityToolKit TouchEffect.Command not working in UWP 【发布时间】:2021-10-29 18:05:12 【问题描述】:我无法成功使 xct:TouchEffect.Command 在 UWP 上运行,同时:
它在同一个项目中适用于 android ... 没有构建错误或警告我做了一个很小的项目来测试它:
在VS2019中启动一个新的Mobile APP项目
添加 Xamarin.CommunityToolKit
在 Mainpage.xaml.cs 中添加两个属性(好的,它可以更好地实现但它可以工作):
private int count = 10;
public int Count
get => count;
set
count = value;
OnPropertyChanged(nameof(Count));
public ICommand PressedCommand => new Command ( () => Count++ );
像这样更新 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 中的任何位置时)。
我错过了什么?!?有什么想法吗?
编辑:
我提到我知道这个帖子:https://github.com/xamarin/XamarinCommunityToolkit/issues/1456
所以我的选择目前如下: Xamarin 5.0.0.2012 版本
【问题讨论】:
奇怪了,官方代码样例here也是一样的代码。 是的,这很奇怪很无聊......我用项目github.com/BelightWavre/CommunityToolKit做了一个GitHub repo 请回滚 1.0 版,它可以按预期工作。请查看打击答案 你试过了吗? 1.0版本对你有用吗? 【参考方案1】:我认为您需要公共 getter 和 setter 才能使命令正常工作。这是我迄今为止的经验。尝试在您的命令中添加公共获取,如下所示:
public ICommand PressedCommand get; => new Command ( () => Count++ );
【讨论】:
我试过这个:public ICommand PressedCommand get => new Command(() => Count++); 但它不会改变任何东西。【参考方案2】:Xamarin.CommunityToolKit TouchEffect.Command 在 UWP 中不起作用
最新的CommunityToolKit
版本已知问题,但在早期版本中运行良好。
目前有一个解决方法可以回滚到Xamarin.CommunityToolKit
1.0.0 版。官方代码示例使用的版本是1.0.0。
【讨论】:
感谢回复,我将包降级到 1.0.0,但它还不能工作。我在 GitHub 上升级了我的示例。太令人沮丧了......我错过了什么?!? 我从未读过有关此 Xamarin.CommunityToolKit.Markup 的任何内容。添加“Xamarin.CommunityToolKit.Markup (1.0.0) page”是什么意思?我在所有项目(UWP/Android)上添加了 Nuget 包。然后 ?如何引用它? 只需将其添加到表单项目中。请参考这个document 是的,我找到了一些东西,但不太好......对于同一个项目(以及这里讨论的 Nuget 包安装),它可以在调试模式下工作,但不能在发布模式下工作。无缝地没有触发错误。这对你来说意味着/揭示了什么?【参考方案3】:好的,我在 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 的解决方案。
【讨论】:
以上是关于Xamarin.CommunityToolKit TouchEffect.Command 在 UWP 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章