在没有 XAML 的情况下创建 Windows 应用商店应用页面
Posted
技术标签:
【中文标题】在没有 XAML 的情况下创建 Windows 应用商店应用页面【英文标题】:Creating Windows Store App Pages Without XAML 【发布时间】:2014-05-04 22:58:15 【问题描述】:我正在编写一个 C#/XAML Windows 应用商店应用程序,并希望完全使用 C# 创建和导航到并显示一个页面。这可能吗?显然我可以从 Page 继承,但是,当尝试导航到没有 XAML 的派生 Page 时,我得到一个 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()
【问题讨论】:
你为什么要混合你的逻辑和演示来吐在 mvvm 上? 这有关系吗?我问的是怎么做,如果可能,不是好主意。 凹凸。寻找同样的东西。有人吗? pec1985,除了看起来很清楚需要 XAML 之外,我找不到任何东西。具体来说,您需要在 XAML 文件中至少有一个根控件。这可能是一个自定义控件,只提供对代码中定义的部分类的引用。 @cacti,我又来了。好久不见,有消息吗?你能做到这一点吗?干杯。 【参考方案1】:我可以举一个简单页面的例子
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
【讨论】:
【参考方案2】:您可以使用 LINQ 和 XML 创建动态 XAML。
这是一个关于如何创建动态 TextBlock 的示例;您可以使用该概念将其应用于 Page 元素:
http://msdn.microsoft.com/en-us/library/cc189044(v=vs.95).aspx
【讨论】:
谢谢,这很有趣。不幸的是,它仍然需要一个 XAML 文件来设置根对象(然后动态填充)。我希望完全避免任何 XAML 声明。 这里的问题不是如何在 XAML 中做事,而是如何在后面的代码中导航。以上是关于在没有 XAML 的情况下创建 Windows 应用商店应用页面的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在没有管理员权限的情况下安装.appxbundle(UWP / XAML应用程序)?
使用XAML Designer时出现XamlParseException