uno-platform - 无法覆盖 OnApplyTemplate

标签 uno-platform

我正在尝试覆盖 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 的输出 Pane 中没有错误或显示任何内容。这种情况应该有吗?我需要启用某些功能来记录错误吗?

  3. 我注意到,如果我不使用 partial ,则会出现错误,提示需要 partial 。这仅在 Android 上是必需的,为什么呢?更深入的解释将有助于理解事物的工作原理。

  4. 一旦我弄清楚为什么 OnApplyTemplate 没有被调用,我就想这样做:

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

我的预感是这在 Android 上不起作用。我对么? :)

最佳答案

Jerome 的回答解释了为什么 OnApplyTemplate() 没有被调用,以解决您的其他问题:

  • 您可以为 Uno 配置日志过滤器,这通常定义为 in App.xaml.cs 。默认情况下应记录警告。

  • partial 是必需的,因为 Uno 在幕后执行一些代码生成来创建 Xamarin 运行时使用的管道方法。具体来说是因为该控件最终继承自 ViewGroup在 Android 上,它是一个 native 对象,需要特殊的构造函数 used only by Xamarin's interop layer 。有some documentation in progress在此。

  • 尝试一下看看。 :) 支持 GetTemplateChild(),并且支持以这种方式设置 ContentControl.Content,所以我希望它能够工作。

  • 关于uno-platform - 无法覆盖 OnApplyTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57309447/

    相关文章:

    uno-platform - uno 平台自动生成的文件和 program.cs 中的错误 - 仅在 Mac 上

    uno-platform - 为 WebView 提供 Assets URL

    database - Uno 平台是否有访问 MSSQL、PostgreSQL 或 MYSQL 的代码示例?

    azure-functions - 在我的 UNO WASM 项目中,HTTP POST 调用在我的本地 Azure Functions 上变成了 HTTP OPTIONS

    .net - MAUI 和 Uno 平台有什么区别?

    uno-platform - 在Windows 10上安装uno平台

    xaml - 如何在 (Uno 2.4) 中使用 Microsoft.UI.Xaml.Controls 资源

    uno-platform - WinUI - 无法加载 DLL 'Microsoft.ui.xaml.dll'

    webassembly - 如何在 WebAssembly 中为 Uno 平台启用深度链接

    使用 Uno 平台 retrofit 5.0 失败,错误代码为 "MissingMethodException"