Xamarin.CommunityToolKit TouchEffect.Command 无法在 UWP 中工作
Xamarin.CommunityToolKit TouchEffect.Command not working in UWP
我无法成功使 xct:TouchEffect. 命令在 UWP 上运行,同时:
- 它正在为同一项目中的 android 工作...
- 没有构建错误或警告
我做了一个很小的项目来测试它:
在VS2019中开始一个新的手机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 中的任何位置时)。
我错过了什么?!?有什么想法吗?
编辑:
我提到我知道这个 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 的解决方案。
我无法成功使 xct:TouchEffect. 命令在 UWP 上运行,同时:
- 它正在为同一项目中的 android 工作...
- 没有构建错误或警告
我做了一个很小的项目来测试它:
在VS2019中开始一个新的手机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 中的任何位置时)。
我错过了什么?!?有什么想法吗?
编辑:
我提到我知道这个 post: https://github.com/xamarin/XamarinCommunityToolkit/issues/1456
所以我目前的选择如下:
我认为您需要 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 的解决方案。