我正在尝试覆盖 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 的输出 Pane 中没有错误或显示任何内容。这种情况应该有吗?我需要启用某些功能来记录错误吗?
我注意到,如果我不使用
partial
,则会出现错误,提示需要partial
。这仅在 Android 上是必需的,为什么呢?更深入的解释将有助于理解事物的工作原理。一旦我弄清楚为什么 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/