在没有 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

在资源有效的情况下使用来自WPF中的Inkscape的矢量图形

如何在文件后面没有代码的情况下移动无边框 wpf 窗口

WPF 第一课