情况
我为我的UWP应用程序制作了一个摘要Page
:TestPage
。这个页面包含一些抽象项目,在这个简化的例子中只是一个string
。
MVCE可以在中找到
C#代码:
public abstract partial class TestPage : Page
{
public abstract string AbstractName { get; }
public TestPage()
{
InitializeComponent();
}
}
XAML:
<Page
x:Class="UWP_Test.TestPage"
...
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<TextBlock HorizontalAlignment="Center"
VerticalAlignment="Center"
Style="{StaticResource TitleTextBlockStyle}"
Text="{x:Bind AbstractName}"/>
</Grid>
</Page>
然后我制作了两个派生页面,或者更确切地说是类:
public sealed class TestPage1 : TestPage
{
public override string AbstractName => "TestPage1";
}
public sealed class TestPage2 : TestPage
{
public override string AbstractName => "TestPage2";
}
问题
如果我现在尝试将Frame
导航到TestPage1
或TestPage2
,这将在DEBUG构建中工作,但在RELEASE生成中失败(System.AccessViolationException:"尝试读取或写入受保护的内存。">(。这与优化代码或.net本机工具链是启用还是禁用无关。
对于我实际的UWP应用程序,我希望能够使用上述原理快速制作出在ItemTemplates
、Viewmodels等几个方面不同的非常相似的页面。
如果有任何线索可以在发布版本中实现这一点,或者如何解决这一问题,我将不胜感激(在没有为每个派生页面创建单独的XAML文件的情况下,我已经在其他地方使用了它,并且正在发布中实现(。
显然,我希望它的工作方式在Release构建中似乎不受支持,这似乎是因为为Release或Debug构建编译.xaml和.cs文件的方式。
目前,我将使用多个.xaml文件,但我将继续尝试找到一种方法来实现这一点,并防止出现许多完全相同的.xaml代码(毕竟,使用同一代码的多个副本会在以后的某个地方出现问题(。
当我找到答案时,我会相应地更新这个答案。(感谢Hamed和Mikah迄今为止的帮助(