Невозможно переопределить OnApplyTemplate

Я пытаюсь переопределить NavigationView поведение:


    public partial class CustomizableNavigationView : NavigationView
    {
        public CustomizableNavigationView()
        {
            // This gets called
        }

        protected override void OnApplyTemplate()
        {
            // This doesn't

        }
    }

Работает на UWP, но не на Android. На Android он не вызывает OnApplyTemplate, и экран остается пустым, там нет контента. Вопросов:

  1. Почему OnApplyTemplate не вызывается на Android? Я вижу это здесь: https://platform.uno/docs/articles/implemented/windows-ui-xaml-frameworkelement.html там написано, что OnApplyTemplate() есть на всех платформах

  2. Там нет ошибки или что-либо отображается в панели вывода в VS при работе с отладчиком. Должны ли они быть в этом случае? Нужно ли включать что-то для регистрации ошибок?

  3. Я заметил, что если я не использую partial это дает мне ошибку, говоря partial требуется. Это требуется только на Android, почему так? Более подробное объяснение очень помогло бы понять, как все работает.

  4. Как только я выясню, почему не вызывается OnApplyTemplate, я хочу сделать это:

 base.OnApplyTemplate();
            var settingsItem = (NavigationViewItem)GetTemplateChild("SettingsNavPaneItem");
            settingsItem.Content = "Custom text";

Мое предположение, это не будет работать на Android. Я прав?:)

2 ответа

Решение

Ответ Джерома объясняет почему OnApplyTemplate() не звонили, чтобы ответить на ваши другие вопросы:

  1. Вы можете настроить фильтры журналов для Uno, это обычно определяется в App.xaml.cs. Предупреждения должны быть зарегистрированы по умолчанию.

  2. partial Требуется потому, что Uno делает некоторый кодекс за кулисами для создания методов подключения, используемых средой выполнения Xamarin. В частности, поскольку элемент управления в конечном итоге наследуется от ViewGroup на Android, он является нативным объектом и требует специальных конструкторов, которые используются только уровнем взаимодействия Xamarin. В данный момент идет подготовка документации.

  3. Попробуйте и посмотрите.:) GetTemplateChild() поддерживается и настройка ContentControl.Content таким образом поддерживается, поэтому я ожидаю, что это будет работать.

В текущей версии (1.45 и ниже) применение стилей ведет себя иначе, чем UWP. Мы отслеживаем это в этом выпуске.

Суть проблемы в том, что Uno разрешает стиль, используя текущий тип, а не DefaultStyleKeyи не может найти неявный стиль для CustomizableNavigationView,

Обходным путем для этого является либо создание именованного стиля из стиля NavigationView по умолчанию, либо создание неявного стиля, который использует CustomizableNavigationView как TargetType вместо NavigationView,

Другие вопросы по тегам