创建Windows商店应用程序页面没有XAML

本文关键字:XAML 应用程序 Windows 创建 | 更新日期: 2023-09-27 17:54:03

我正在编写一个c#/XAML Windows Store应用程序,并希望创建和导航到并显示一个完全来自c#的页面。这可能吗?显然,我可以从页面继承,但是,当试图导航到没有XAML的派生页面时,我得到一个system . typeloadeexception…"找不到Windows运行时类型'Windows. foundation '".

我的想法是这应该是可能的,因为XAML转换成CLR部分类定义,所以没有理由不能在c#中做所有事情。但很明显,我遗漏了一些框架要求。

建议吗?

现在我所有的派生页面都是

using Windows.UI.Xaml.Controls;
namespace App1 {
    public class Page2 : Page {
        public Page2 () { }
    }
}

下面是完整的例外:

Could not find Windows Runtime type 'Windows.Foundation'.
at System.StubHelpers.WinRTTypeNameConverter.GetTypeFromWinRTTypeName(String typeName, Boolean& isPrimitive)
at System.StubHelpers.SystemTypeMarshaler.ConvertToManaged(TypeNameNative* pNativeType, Type& managedType)
at Windows.UI.Xaml.Controls.Frame.Navigate(Type sourcePageType)
at App1.MainPage.<P2>d__2.MoveNext()

创建Windows商店应用程序页面没有XAML

我可以举一个简单页面的例子

using System;
using Windows.ApplicationModel.Activation;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
namespace MyApp
{
    class Program
    {
        public static void Main (string[] args)
        {
            Application.Start((p) => new MyApp());
        }
    }
    class MyApp : Windows.UI.Xaml.Application
    {
        public MyApp(){}
        protected override void OnLaunched(LaunchActivatedEventArgs args)
        {
            var layoutRoot = new Grid() { Background = new SolidColorBrush(Colors.Blue) };
            layoutRoot.Children.Add(new Button() { Content = "Hello!" });
            Window.Current.Content = layoutRoot;
            Window.Current.Activate();
        }
    }
}

编译时用正确的项替换这些路径:

C:'Windows'Microsoft.NET'Framework'v4.0.30319'csc.exe /target:appcontainerexe /r:"C:'Windows'Microsoft.NET'Framework'v4.0.30319'System.Runtime.WindowsRuntime.dll" /r:"C:'Windows'Microsoft.NET'Framework'v4.0.30319'System.Runtime.dll" /r:"C:'Windows'System32'WinMetadata'windows.applicationmodel.winmd" /r:"C:'Windows'System32'WinMetadata'windows.ui.winmd" /r:"C:'Windows'System32'WinMetadata'windows.ui.xaml.winmd" /r:"C:'Windows'System32'WinMetadata'windows.media.winmd" MyApp.cs

您可以使用LINQ和XML创建动态XAML。

下面是一个关于如何创建动态TextBlock的示例;您可以使用该概念将其应用于Page元素:

http://msdn.microsoft.com/en-us/library/cc189044 (v = vs.95) . aspx