mis*_*han 4 c# xaml custom-controls windows-phone-8
我用谷歌搜索,但没有得到任何有用的资源,所以我决定问.
问题:
我有一个Windows Phone 8 C#/ XAML .NET 4.5应用程序,它将有几个页面(15 - 50),它们将具有相似的外观+相同的datacontext设置为一个ViewModel实例:
--------------------------
|logo usermenu(v)|
--------------------------
| |
| |
| |
| ..variable.. |
| ..content... |
| |
| |
--------------------------
Run Code Online (Sandbox Code Playgroud)
题 :
我在这件事上找不到任何可用的东西,有人可以解释一下怎么做吗?
(我是菜鸟 - 这意味着我很感激任何有用的信息,但更多的是对傻瓜的解释)
如何创建一个基页/祖先来从中派生我的页面?
有没有办法在祖先中设置datacontext?
如何使用该基页/祖先?
PS:如果你想知道为什么我想要有相同datacontext的页面,那么我在之前提出的这个问题中有更多关于它的文章
听起来你可能在这里采取了错误的方法.
不是拥有15-50个具有相同数据上下文的相同页面,而是拥有一个页面并改变DataContext.这将比拥有大量页面都简单得多,这些页面都来自同一个基础.
当然,这取决于您的实际内容的变化程度.
就您的具体问题而言:
页面是与其他类似的类,因此继承以相同的方式定义.只需确保在cs和xaml文件中指定祖先.
您不能将祖先中的datacontext设置为与实际实例不同,如果您只是在祖先中设置它,则实例无法使用它.您需要在实例中设置DataContext.
像这样的东西:
一个非视觉(稍后会详细介绍)基页
namespace SO19398590
{
using Microsoft.Phone.Controls;
public class MyBasePage : PhoneApplicationPage
{
}
}
Run Code Online (Sandbox Code Playgroud)
从中继承的实际页面.
CS:
public partial class MainPage : MyBasePage
{
public MainPage()
{
InitializeComponent();
}
}
Run Code Online (Sandbox Code Playgroud)
xaml(部分):
<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>
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个没有可视化的基页,我知道您要求从基类进行可视继承.
不幸的是,在可视化页面继承方面,Windows Phone的故事非常糟糕.工具(设计师)不喜欢它,并且很容易陷入难以诊断的问题.
更好的方法是使用一个页面的[多个实例],但根据要显示的数据加载不同的用户控件.
稍微复杂的替代方案但仍允许标准页面导航体验是使用自定义PhoneApplicationFrame并在那里包含常见的UI元素.
对不起,这是一个非常通用的答案,但"最佳"解决方案将取决于您定义为"可变内容"的空间中的实际内容.