В моей проблеме участвуют три класса. PopupView, CardView и TestPopup. PopupView представляет собой базовый класс для всплывающих окон и использует CardView для линейного отображения 3 ContentView с телом заголовка и нижним колонтитулом. TestPopup наследует PopupView, который сам предоставляет свойство Body, которое устанавливает свойство CardView Body вместе с последним.
Обратите внимание, что PopupView и CardView находятся в отдельной библиотеке классов, это имеет значение, потому что, если я определите TestPopup в библиотеке классов, все работает нормально. Итак, на данный момент я думаю, что либо я делаю что-то ужасно неправильно, либо в MAUI, возможно, кто-то знает ошибку.
Вот код:
PopupText.xaml
PopupTest.Xaml.cs
public partial class PopupTest : PopupView
{
public PopupTest()
{
InitializeComponent();
}
}
PopupView (предоставляется только соответствующий код)
public partial class PopupView : PopupBase
{
public PopupView()
{
InitializeComponent();
}
protected override void OnSizeAllocated(double width, double height)
{
base.OnSizeAllocated(width, height);
if (width != -1 && height != -1)
{
//-->>>>>>>>>>>> Here cardView is null. bodyContentView however is not null.
cardView.WidthRequest = width * TimerToolkitConfig.PopupPageWidthRatio;
cardView.MinimumHeightRequest = TimerToolkitConfig.ConfirmationPopupContentHeight;
cardView.MaximumHeightRequest = height * TimerToolkitConfig.PopupPageHeightRatioMax;
bodyContentView.Content = Body;
}
}
}
PopupView.xaml:
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Name="popupView"
>
PopupBase (PopupPage взят из Nuget Moups):
public abstract class PopupBase : PopupPage
{
protected TaskCompletionSource
? _taskCompletionSource;
protected PopupResult ReturnValue { get; set; } = new PopupResult();
public Task PopupDismissedTask => _taskCompletionSource != null ? _taskCompletionSource!.Task : new TaskCompletionSource().Task;
public PopupBase()
{
CloseWhenBackgroundIsClicked = false;
BackgroundClicked += PopupBase_BackgroundClicked;
}
protected virtual async Task Dismiss(bool cancelled = false)
{
ReturnValue.Cancelled = cancelled;
await MopupService.Instance.PopAsync();
}
private async void PopupBase_BackgroundClicked(object? sender, EventArgs e)
{
await Dismiss(true);
}
protected override void OnAppearing()
{
base.OnAppearing();
_taskCompletionSource = new TaskCompletionSource();
}
protected override void OnDisappearing()
{
base.OnDisappearing();
if (_taskCompletionSource != null)
{
_taskCompletionSource!.SetResult(ReturnValue);
}
}
}
public sealed class PopupResult
{
public object? ReturnValue { get; set; }
public bool Cancelled { get; set; }
}
CardView.xaml.cs:
public partial class CardView : ContentView
{
public static readonly BindableProperty HeaderProperty = BindableProperty.Create(nameof(Header), typeof(View), typeof(CardView));
public View Header
{
get => (View)GetValue(HeaderProperty);
set => SetValue(HeaderProperty, value);
}
public static readonly BindableProperty BodyProperty = BindableProperty.Create(nameof(Body), typeof(View), typeof(CardView));
public View Body
{
get => (View)GetValue(BodyProperty);
set => SetValue(BodyProperty, value);
}
public static readonly BindableProperty FooterProperty = BindableProperty.Create(nameof(Footer), typeof(View), typeof(CardView));
public View Footer
{
get => (View)GetValue(FooterProperty);
set => SetValue(FooterProperty, value);
}
public CardView()
{
InitializeComponent();
}
}
CardView.xaml:
Здесь, когда я пытаюсь получить доступ к элементу из представления в коде программной части, один из них имеет значение null. Это «картВью». «bodyContentView», который является дочерним элементом «cardView», не имеет значения NULL. Как это вообще возможно ? Будем очень признательны за любую информацию по этому поводу. Честно говоря, я понятия не имею, как это может произойти.
РЕДАКТИРОВАТЬ: этот код определен в PopupView.xaml.cs и не был включен в исходное сообщение< /p>
public static readonly BindableProperty BodyProperty = BindableProperty.Create(nameof(Body), typeof(View), typeof(PopupView));
public View Body
{
get => (View)GetValue(BodyProperty);
set => SetValue(BodyProperty, value);
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... alized-why
Элемент представления, доступ к которому осуществляется в коде программной части, имеет значение null, когда его следует ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
На элементы управления ASP.NET нельзя ссылаться в коде программной части в Visual Studio 2008.
Anonymous » » в форуме C# - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как правильно настроить страницу Razor для доступа к данным в коде программной части
Anonymous » » в форуме C# - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Статический член null.R2.id, доступ к которому осуществляется через ссылку на экземпляр.
Anonymous » » в форуме JAVA - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-