Xamarin.Forms: вкладки с Sharnado.presentation.forms не реагируют на нажатие - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь использовать потрясающую функциональность Sharpnado для создания так называемых «фиксированных вкладок». Но он не делает то, что я хочу, - и проблема может лежать где-то еще ... В основном, вкладки не реагируют на нажатие. С этим простым примером я сократил его до этого.

Контекст - это приложение, которое использует обычную страницу с вкладками (со страницами навигации для каждой вкладки). На одной из этих вкладок я попытался поместить элемент управления TabHostView - даже без привязки, как я изначально думал, что это проблема. Это скриншот тестовой страницы: Sample page Ничего не происходит, когда я нажимаю на две вкладки ("Personlig" и "Udforsk"). 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:tabs="clr-namespace:Sharpnado.Presentation.Forms.CustomViews.Tabs;assembly=Sharpnado.Presentation.Forms"
        xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
        ios:Page.UseSafeArea="true"
        xmlns:views="clr-namespace:Angler.Views.Partials"
        x:Class="Angler.Views.StatisticsPage">
    <NavigationPage.TitleView>
        <Label Text="{Binding Title}" HorizontalOptions="Center"
                VerticalOptions="Center" Style="{StaticResource PageTitle}" />
    </NavigationPage.TitleView>
    <StackLayout VerticalOptions="FillAndExpand" BackgroundColor="LightYellow">
        <Label Text="{Binding ShowSelectedTab}" Margin="20,10" />
        <Grid RowSpacing="0" ColumnSpacing="0" Margin="0"
                BackgroundColor="LightPink" VerticalOptions="FillAndExpand">
            <Grid.RowDefinitions>
                <RowDefinition Height="40" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <tabs:TabHostView ShadowType="Bottom" Grid.Row="0">
                <tabs:TabHostView.Tabs>
                    <tabs:UnderlinedTabItem Label="Personlig" />
                    <tabs:UnderlinedTabItem Label="Udforsk" IsSelected="True" />
                </tabs:TabHostView.Tabs>
            </tabs:TabHostView>
        </Grid>
    </StackLayout>
</ContentPage>

Viewmodel выглядит следующим образом (хотя вышесказанное было сужено, чтобы не использовать свойство для tabindex. Но я также исследовал, был ли контекст привязки для модели представления былХорошо - и, похоже, так):

public class StatisticsPageViewModel : ViewModelBase
{
    public int SelectedTabIndex { get; set; }
    public string ShowSelectedTab { get { return $"Index: {SelectedTabIndex}"; } }
    public StatisticsPageViewModel(INavigationService navigationService, IPageDialogService pageDialogService,
        IDeviceService deviceService) : base(navigationService, pageDialogService,
            deviceService)
    {
        Title = AppResources.StatisticsPageTitle;
    }

    public override void OnAppearing()
    {
        //SelectedTabIndex = 1;
        base.OnAppearing();
        Analytics.TrackEvent("Navigate to Statistics");
    }
}

Я использую VisualStudio для Mac 8.3.4 (сборка 8), Sharpnado.presentations.forms 1.3.0 и Prism.forms 7.2.0.1367.

Я пытался добавить InputTransparent="True" к некоторым объектам-контейнерам - безрезультатно.

Любые хорошие идеи относительно того, как решить эту проблему, наиболее ценны!

1 Ответ

1 голос
/ 26 октября 2019

Хорошо, это было просто глупо (и трата двух дней!) ...

Пытаясь решить другие проблемы, я отступил в своем репо-источнике - и однажды слишком далеко назад ... Так что инициализации Sharpnado в платформах проектов не было. Такого рода разница.

Таким образом, вы увидите этот тип поведения, если вы не помните, чтобы добавить эту строку в свои проекты платформы:

SharpnadoInitializer.Initialize()

Просто оставьте это здесь на случай, если кто-то еще может оказатьсяс тем же симптомом: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...