Элемент представления, доступ к которому осуществляется в коде программной части, имеет значение null, когда его следуетC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Элемент представления, доступ к которому осуществляется в коде программной части, имеет значение null, когда его следует

Сообщение Anonymous »

В моей проблеме участвуют три класса. 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»