#c# #xamarin.forms #uwp #command #windows-community-toolkit
Вопрос:
Я не могу добиться успеха в создании xct:TouchEffect.Команда, работающая над UWP, в то время как:
- он работает для Android в том же проекте …
- ошибки сборки или предупреждения нет
Я сделал очень маленький проект, чтобы протестировать его:
- Запустите новый проект мобильного приложения в VS2019
- Добавьте Xamarin.CommunityToolKit
- Добавьте два свойства на главную страницу.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. Но привязка 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);
Спасибо всем за предложения и Андреимисюкевичу за решение.