Невозможно переопределить OnApplyTemplate
Я пытаюсь переопределить NavigationView
поведение:
public partial class CustomizableNavigationView : NavigationView
{
public CustomizableNavigationView()
{
// This gets called
}
protected override void OnApplyTemplate()
{
// This doesn't
}
}
Работает на UWP, но не на Android. На Android он не вызывает OnApplyTemplate, и экран остается пустым, там нет контента. Вопросов:
Почему OnApplyTemplate не вызывается на Android? Я вижу это здесь: https://platform.uno/docs/articles/implemented/windows-ui-xaml-frameworkelement.html там написано, что OnApplyTemplate() есть на всех платформах
Там нет ошибки или что-либо отображается в панели вывода в VS при работе с отладчиком. Должны ли они быть в этом случае? Нужно ли включать что-то для регистрации ошибок?
Я заметил, что если я не использую
partial
это дает мне ошибку, говоряpartial
требуется. Это требуется только на Android, почему так? Более подробное объяснение очень помогло бы понять, как все работает.Как только я выясню, почему не вызывается OnApplyTemplate, я хочу сделать это:
base.OnApplyTemplate();
var settingsItem = (NavigationViewItem)GetTemplateChild("SettingsNavPaneItem");
settingsItem.Content = "Custom text";
Мое предположение, это не будет работать на Android. Я прав?:)
2 ответа
Ответ Джерома объясняет почему OnApplyTemplate()
не звонили, чтобы ответить на ваши другие вопросы:
Вы можете настроить фильтры журналов для Uno, это обычно определяется в App.xaml.cs. Предупреждения должны быть зарегистрированы по умолчанию.
partial
Требуется потому, что Uno делает некоторый кодекс за кулисами для создания методов подключения, используемых средой выполнения Xamarin. В частности, поскольку элемент управления в конечном итоге наследуется от ViewGroup на Android, он является нативным объектом и требует специальных конструкторов, которые используются только уровнем взаимодействия Xamarin. В данный момент идет подготовка документации.Попробуйте и посмотрите.:)
GetTemplateChild()
поддерживается и настройкаContentControl.Content
таким образом поддерживается, поэтому я ожидаю, что это будет работать.
В текущей версии (1.45 и ниже) применение стилей ведет себя иначе, чем UWP. Мы отслеживаем это в этом выпуске.
Суть проблемы в том, что Uno разрешает стиль, используя текущий тип, а не DefaultStyleKey
и не может найти неявный стиль для CustomizableNavigationView
,
Обходным путем для этого является либо создание именованного стиля из стиля NavigationView по умолчанию, либо создание неявного стиля, который использует CustomizableNavigationView
как TargetType
вместо NavigationView
,