如何使用DesignData来帮助开发Metro应用?(How can I use DesignDa

2019-09-20 03:12发布

我一直在欢快使用DesignData在Windows Phone应用,并且我希望用它来帮助可视化的Metro风格应用程序的设计在VS2012 /掺和VS.

我已经试过有望明显:

<common:LayoutAwarePage
x:Name="pageRoot"
x:Class="MyRootNamespace.Views.EventView"
DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}"
IsTabStop="false"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MyRootNamespace.Views"
xmlns:common="using:MyRootNamespace.Common"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:bm="using:Bing.Maps"
d:DataContext="{d:DesignData Source=../SampleData/SpecialEventSampleData.xaml}"
mc:Ignorable="d">

随着SpecialEventSampleData.xaml寻找松散喜欢:

<local:SpecialEvent 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"       
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MyRootNamespace.ViewModels" 
EventName="Foo Fighters" 
Description="This exclusive April Fools Gig will see Dave Grohl and the rest of the Foo Fighters rock out at this exclusive made up gig" 
VenueName="Village Hall" 
/>

它指的是这个类有一个公共的无参数构造函数,但Visual Studio是给了一个错误:

错误无法创建“SpecialEvent”的一个实例。 C:\ MyRootNamespace.Windows \的sampleData \ SpecialEventSampleData.xaml

此外,我期待有设置构建行动“DesignData”,或类似的,但这并不似乎是在Visual Studio 2012的选项?

我需要做什么做能够得到设计时的数据在VS2012工作/配方?

Answer 1:

是SpecialEvent您的视图模型? 如果是这样,你可以做这样的事情在你的XAML(后直接您共同:LayoutAwarePage开放申报)?

<d:Page.DataContext>
    <local:SpecialEvent>
</d:Page.DataContext>

LayoutAwarePage:然后从您共同删除此行:

d:DataContext="{d:DesignData Source=../SampleData/SpecialEventSampleData.xaml}" 

我有与此类似的是工作代码。



Answer 2:

在Windows手机(我相信)的路径样本数据文件是相对于应用程序根目录。 在Windows 8中,路径样本数据文件是相对于你想使用它的页面XAML文件

在上面的示例中,page.xaml文件将需要在项目的子文件夹,但在不同的文件夹的sampleData。

Windows 8的样本数据并不会自动为您创建集合实例。 所以,如果你有这样的样本数据:

<Event>
 <Attendees>
   <Attendee Name="Joe" />
 </Attendees>
</Event>

你需要确保当你定义变量为与会者属性支持字段设置为一个新的集合实例。 如果您正在使用自动属性( 与会者{获取;集;}语法),你需要将属性设置为一个新的集合实例在构造函数才能在XAML中添加的条目。

Finaly,Windows 8的XAML不能处理泛型类型。 所以,如果您的与会者属性的类型是集合<与会者>,你将无法在XAML来创建它的一个实例。

你总是可以做一个简单的类名为AttendeeCollection集合<与会者>继承和XAML中创建的那个实例来代替。

希望帮助。



Answer 3:

尽量完整路径XAML文件,而不是相对的。



Answer 4:

这是一个触摸不起眼,但它归结为我的执行INotifyPropertyChanged我的视图模型。

在我的Windows Phone的代码,我必须去努力,以确保通过后台工作线程引发的事件在UI线程上弹出一个小的量:

protected delegate void OnUIThreadDelegate();
protected void OnUIThread(OnUIThreadDelegate onUIThreadDelegate)
{
    if (Deployment.Current.Dispatcher.CheckAccess())
    {
        onUIThreadDelegate();
    }
    else
    {
        Deployment.Current.Dispatcher.BeginInvoke(onUIThreadDelegate);
    }
}

然后将其用于:

protected override void OnPropertyChanged(PropertyChangedEventArgs e)
{
    OnUIThread(() =>
    {
        base.OnPropertyChanged(e);
    });
}

看来,移植代码的时候,我没有检查的结果CoreWindow.GetForCurrentThread()这是引起异常火在代码的最黑暗的深处深,因为设计师是我的类型设置的属性,我是努力提高事件和死亡可怕代替。 我的错。



文章来源: How can I use DesignData to help develop a Metro app?