不使用XAML创建Windows应用商店应用页面

时间:2014-03-26 13:37:43

标签: c# xaml windows-runtime windows-store-apps

我正在编写一个C#/ XAML Windows应用商店应用,并希望完全从C#创建和导航并显示一个页面。这可能吗?显然我可以从Page继承,但是,当试图导航到没有XAML的派生页面时,我得到一个System.TypeLoadException ...“找不到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()

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

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

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

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