创建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()
我可以举一个简单页面的例子
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