如果背景颜色发生变化,WinRT ListPickerFlyout会崩溃应用程序

时间:2015-02-07 20:43:09

标签: windows-runtime winrt-xaml win-universal-app

如果我将以下代码放在骨架WinRT应用程序中,它将不会构建主页:

<Page
x:Class="TestApp1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TestApp1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="Blue">

<Page.Resources>
    <ListPickerFlyout x:Key="btnfly"/>
</Page.Resources>

<Grid>

</Grid>
</Page>

错误是:

An exception of type 'Windows.UI.Xaml.Markup.XamlParseException' occurred in TestApp1.WindowsPhone.exe but was not handled in user code WinRT information: Cannot create instance of type '%0' [Line: 12 Position: 42]

背景标记更改回{ThemeResource ApplicationPageBackgroundThemeBrush}可解决问题。

我有什么想法可以更改页面的背景颜色并仍使用ListPickerFlyout吗?

2 个答案:

答案 0 :(得分:0)

简单的解决方案是在构造函数中设置背景颜色,在调用InitializeComponent

public MainPage()
{
  this.InitializeComponent();

  // Or the colour of your choice...
  Background = new SolidColorBrush(Windows.UI.Colors.Blue);

  this.NavigationCacheMode = NavigationCacheMode.Required;
}

有趣的问题是“为什么?” - 我猜是因为ListPickerFlyout实际上不是UIElement,在初始化过程中会发生一些奇怪的交互。

答案 1 :(得分:0)

是的,“为什么”是一个有趣的问题,彼得的答案很好。

我还从另一个StackOverflow问题中找到了另一个答案。

首先,通过将以下内容添加到App.xaml来覆盖FlyoutBackgroundThemeBrush:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.ThemeDictionaries>
            <ResourceDictionary x:Key="Dark">
                <SolidColorBrush x:Key="FlyoutBackgroundThemeBrush" Color="Blue" />
            </ResourceDictionary>
            <ResourceDictionary x:Key="Light">
                <SolidColorBrush x:Key="FlyoutBackgroundThemeBrush" Color="Blue" />
            </ResourceDictionary>
        </ResourceDictionary.ThemeDictionaries>
    </ResourceDictionary>
</Application.Resources>

然后将页面背景更改为Background="{ThemeResource FlyoutBackgroundThemeBrush}"