C# WP8如何创建基本页&;使用它

C# WP8如何创建基本页&;使用它,c#,xaml,windows-phone-8,custom-controls,C#,Xaml,Windows Phone 8,Custom Controls,我在谷歌上搜索过,但没有得到任何有用的资源,所以我决定去问 问题: 我有一个Windows Phone 8 C#/XAML.NET 4.5应用程序,它将有多个页面(15-50个),所有页面都将具有相似的外观+相同的数据上下文设置为一个ViewModel实例: -------------------------- |logo usermenu(v)| -------------------------- |

我在谷歌上搜索过,但没有得到任何有用的资源,所以我决定去问

问题:

我有一个Windows Phone 8 C#/XAML.NET 4.5应用程序,它将有多个页面(15-50个),所有页面都将具有相似的外观+相同的数据上下文设置为一个ViewModel实例

    --------------------------
    |logo         usermenu(v)|
    --------------------------
    |                        |
    |                        |
    |                        |
    |     ..variable..       |
    |     ..content...       |
    |                        |
    |                        |
    --------------------------
问题:

我在这件事上找不到任何有用的东西,有人能解释一下怎么做吗

(我是新手——这意味着我非常感谢任何有用的信息,但更感谢对傻瓜的解释)

  • 如何创建从中派生页面的基页/祖先

  • 有没有办法在祖先中设置datacontext

  • 如何使用该基本页/祖先


注意:如果你想知道为什么我想要有相同datacontext的页面,在

中有更多关于它的文章,听起来你可能采取了错误的方法

不要让15-50个相同的页面具有相同的数据上下文,而是使用一个页面并改变数据上下文。这将比从同一个基础上生成大量页面要简单得多。
当然,这取决于实际内容的变化程度

关于你的具体问题:

  • 页面和其他任何页面一样都是类,因此继承也是以同样的方式定义的。只需确保在
    cs
    xaml
    文件中指定祖先即可

  • 不能将祖先中的datacontext设置为与实际实例不同,如果只是在祖先中设置,则实例将无法使用它。您需要在实例中设置DataContext

  • 大概是这样的:

非可视(稍后将对此进行详细介绍)的基本页面

namespace SO19398590
{
    using Microsoft.Phone.Controls;

    public class MyBasePage : PhoneApplicationPage
    {
    }
}
从中继承的实际页面。
政务司司长:

xaml(部分):


请注意,这是一个没有视觉效果的基页,我知道您要求从基类进行视觉继承。
不幸的是,当涉及到可视页面继承时,Windows Phone的情况非常糟糕。工具(设计师)不喜欢它,而且很容易陷入难以诊断的问题

更好的方法是使用一个页面的[多个实例],但根据要显示的数据加载不同的用户控件。
一个稍微复杂一点但仍然允许标准页面导航体验的替代方案是使用定制的
PhoneApplicationFrame
,并在其中包含常见的UI元素


很抱歉,这是一个非常通用的答案,但“最佳”解决方案将取决于您定义为“可变内容”的空间中实际发生的情况。在我看来,最好的方法是创建一个包装您的徽标和用户菜单的用户控件。然后你在每页中都包含UserControl

谢谢你的回答,最终让我明白了这一点:)我需要更多的页面,因为会有很多可变内容-很多不同的数据视图,一些地图,很多按钮。-最终,物理页面将少于15-50页。我知道可以在android中创建我想要的东西,所以我开始寻找解决方案,但似乎有更好的方法。关于datacontext,我有一个基于ViewModel的类,包含我想要显示数据的属性和对象。更多关于这方面的信息,请访问
public partial class MainPage : MyBasePage
{
    public MainPage()
    {
        InitializeComponent();
    }
}
<so19398590:MyBasePage
    x:Class="SO19398590.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:so19398590="clr-namespace:SO19398590"
    SupportedOrientations="Portrait">

    <Grid x:Name="LayoutRoot" Background="Transparent">
        <!-- put stuff here -->
   </Grid>

</so19398590:MyBasePage>