2010-04-26 174 views
13

我正在使用4.0系列WPF工具的新d:DesignInstance功能。很棒!如何在XAML中设置d:DesignInstance的属性?

我遇到的唯一问题是:如何在实例上设置属性?鉴于这样的事情:

<Grid d:DataContext="{d:DesignInstance plugin:SamplePendingChangesViewModel, IsDesignTimeCreatable=True}"/> 

如何设置的视图模型的属性,除了将它们设置在其默认的构造函数或通过一些其他的对象初始化路由呢?

我给这是一个尝试,但VS给出编译错误“d:DataContext的未找到”:

<Grid> 
    <d:DataContext> 
     <d:DesignInstance IsDesignTimeCreatable="True"> 
      <plugin:SamplePendingChangesViewModel ActiveTagIndex="2"/> 
     </d:DesignInstance> 
    </d:DataContext> 

就目前而言,我回去使用资源,而“d:DataContext的= { StaticResource SampleData}',我可以在资源中设置属性。

有没有办法通过d:DesignInstance来做到这一点?

+0

您必须要么:1.使用默认的构造函数或2.使用d:[DesignData] (HTTP://msdn.micros oft.com/en-us/library/ee823176.aspx)而不是d:DesignInstance – 2011-06-08 19:41:47

+0

这是完全的例外(使用谷歌搜索这个答案):错误未找到类型'd:DataContext'。验证您是否缺少程序集引用,并且所有引用的程序集都已构建。 – 2011-08-31 03:13:18

回答

22

作为@jberger,您应该使用d:DesignData而不是内联d:DataContext

但是你可以设置d:在XAML文件DataContext的直列为好,秘诀就是用正确的类(DesignProperties)来限定d:DataContext属性:

<d:DesignProperties.DataContext> 
    <plugin:SamplePendingChangesViewModel ActiveTagIndex="2"/> 
</d:DesignProperties.DataContext> 

你怎么知道什么课符合资格?将鼠标悬停在属性语法中设置的属性上,工具提示将显示完全限定的属性名称。

请注意,即时通讯不使用d:DesignInstance作为其工作的具体工作是创建一个您提供名称的类型的实例(或者如果它不能在设计时实例化,则生成该类型的代理) 。这不是我们想要的,我们想在这种情况下在inline xaml中定义实例。

事实上,d:DesignData(也标记扩展)的工作原理大致相同的方式,不同之处在于它寻找一个XAML文件和反序列化是实际情况,而不是只使用使用默认的构造函数。

只是为了完整性我还要提到的是,你可以使用DesignData和DesignInstance与元素语法以及通过使用完整的类名(xxxExtension):

<d:DesignProperties.DataContext> 
    <d:DesignDataExtension Source="SampleData.xaml"></d:DesignDataExtension> 
</d:DesignProperties.DataContext> 

这是大多数标记exstensions,但它不是真正的遵循这个命名convension(Binding类是一个明显的例外)需要更多的信息可以在这里找到:

Markup Extensions and WPF XAML