У меня странная проблема, но это может быть потому, что я не понимаю.Я создал 2 пользовательских элемента управления.[Custom Control A] имеет кнопку с именем [LAUNCH], которая запускает модальный режим.У [Пользовательского элемента управления B] нет кнопок, но внутри имеется Пользовательский элемент управления A.
Я создал страницу с помощью [Пользовательского элемента управления B], но когда я нажимаю [LAUNCH], при отладке он переходит к строке кода, котораяговорит: ждите Navigation.PushModalAsync (новый ModalPage ()), но после этого он не запускает модал.
Я попытался просто добавить [Customer Control A] и нажать [LAUNCH], и он смог показатьМодальное.
Есть ли что-то, что мне нужно сделать, чтобы иметь возможность открыть модальное из пользовательского элемента управления B?
РЕДАКТИРОВАТЬ: После дальнейшей проверки я забыл упомянуть, что [Пользовательский элемент управления B] являетсяэлемент управления, который я связываю для шаблонов элементов списка.Я протестировал снова, просто загружая один [Custom Control B] без просмотра списка, и он смог открыть модальное окно.Однако, когда я помещаю его обратно в представление списка в качестве шаблона элемента, проблема остается.Нужно ли что-то делать, чтобы это можно было запустить?Или это невозможно?
РЕДАКТИРОВАТЬ 2: Сделал новый пример проекта и изолировал кейс, похоже, что он действительно препятствует открытию модала.
[Custom Control A]
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TestXamarin.Controls.CustomControlA">
<ContentView.Content>
<Grid BackgroundColor="AliceBlue" HeightRequest="300">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<FlexLayout Grid.Column="0"
Grid.Row="0"
Grid.RowSpan="2"/>
<Button x:Name="btnOpen"
Text="Try Open Modal"
Clicked="BtnOpen_Clicked"
Grid.Column="1"
Grid.Row="0"/>
</Grid>
</ContentView.Content>
</ContentView>
[Пользовательский элемент управления A] .cs
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class CustomControlA : ContentView
{
public CustomControlA()
{
InitializeComponent();
}
private async void BtnOpen_Clicked(object sender, EventArgs e)
{
await Navigation.PushModalAsync(new Modal());
}
}
[Пользовательский элемент управления B]
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:controls="clr-namespace:TestXamarin.Controls"
x:Class="TestXamarin.Controls.CustomControlB">
<ContentView.Content>
<Frame BorderColor="Accent"
HeightRequest="300"
WidthRequest="300">
<controls:CustomControlA
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"></controls:CustomControlA>
</Frame>
</ContentView.Content>
</ContentView>
[Пользовательский элемент управления B] .cs
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class CustomControlB : ContentView
{
public CustomControlB()
{
InitializeComponent();
}
}
[Главная страница]
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TestXamarin"
xmlns:controls="clr-namespace:TestXamarin.Controls"
x:Class="TestXamarin.MainPage">
<ListView x:Name="listSample"
HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<controls:CustomControlB/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
[Главная страница] .cs
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
protected override void OnAppearing()
{
base.OnAppearing();
var list = Enumerable.Range(1, 10).ToList();
listSample.ItemsSource = list;
}
}