创建不使用XAML的Windows Store应用程序页面

8
我正在编写一款C#/XAML Windows Store应用程序,并希望完全通过C#创建、导航和显示页面。这是否可能?显然,我可以继承自Page类,但是,当试图导航到一个没有XAML的派生页面时,我会得到System.TypeLoadException错误消息...“无法找到Windows Runtime类型'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()

为什么你想把逻辑和展示混在一起,而不使用MVVM模式呢? - Chris W.
6
重要吗?我在问如何做以及是否可能,而不是这是否是一个好主意。 - cacti
顶一下。寻找同样的东西。有人吗? - pec1985
@cacti 我也遇到了完全相同的问题,目前有任何更新吗? - Schrödinger's Box
嗨@cacti,你最近成功了吗?我目前遇到了类似的问题,但是迄今为止没有得到任何有用的答案... http://stackoverflow.com/questions/28986073/error-vb-runtime-is-not-loaded - Peter Klein
显示剩余2条评论
2个回答

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

谢谢,这很有趣。不幸的是,它仍然需要一个XAML文件来设置根对象(然后动态填充)。我希望避免任何XAML声明。 - cacti
这里的问题不在于如何在XAML中完成任务,而在于如何在代码后台进行导航。 - Peter Klein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接